编程语言如何与脚本语言进行交互?

好的,假设你使用C ++设计了一个游戏,同时使用了Lua,那么C ++部分如何与Lua代码交互。我最困惑的主要问题是:

  1. 编译时,Lua代码是否转换为C ++对象?

  2. Lua代码是否根据C ++代码的要求编译?

  3. Lua代码是否依赖于C ++代码,即它使用C ++代码中的函数?

  4. Lua代码的内存是否与C ++代码的内存集成,或者它是完全不同的过程。

点赞
用户869951
用户869951
  1. 在编译时,Lua 代码会转化为指令,由解释器来执行。

    不会转化为 C++ 对象。

  2. Lua 代码是否按照 C++ 代码的要求进行编译?

    是的。

  3. Lua 代码是否依赖于 C++ 代码,即它是否使用从 C++ 代码中的函数?

    可以使用,但不必要。您可以决定从 Lua 中提供哪些 C/C++ 变量和函数。

  4. Lua 代码的内存是否与 C++ 代码的内存集成,还是完全不同的进程?

    集成,同一个进程。

2014-04-21 02:33:54
用户2705567
用户2705567

对于4个问题的简单回答是:(1) 不 (2) 是 (3) 可能 (4) 集成。

稍微讨论一下可能会有所帮助。

Lua是一种用C编写的解释器,它将嵌入到您的应用程序中。Lua具有管理整个脚本执行状态、包含所有全局变量、局部变量等的lua_State结构。Lua会传递这个结构。您可以编写C/C++代码来操作这个lua_State结构,从而允许您添加全局变量,这些变量将对脚本可见......您还可以查询这个lua_State结构以读取脚本设置的变量。此外,您还可以创建C/C++代码来执行Lua脚本函数,并编写C/C++代码将导出C函数到可以直接从脚本调用的Lua脚本中。当发生这种情况时,将lua_State对象传递给C函数,因此您可以使用脚本引擎数据,根据需要进行读取和修改。

通常,使用C/C++编写的游戏将实现一个引擎,处理所有渲染和其他时间关键的项目部分。通过获得一个引擎,您可以创建C/C++代码来创建相关对象来创建和控制您的游戏。但是,您还可以将引擎API导出到Lua,然后创建Lua脚本来调用引擎API,从而控制游戏。

大多数情况下,这是不希望发生的。您希望游戏引擎保持控制其如何执行,但您希望允许引擎在特定的指南下扩展。为此,大多数引擎将使用某种“回调”机制添加Lua支持,其中游戏引擎被设计为在特定时间点发出对某些Lua脚本函数的调用。例如,可能会有回调用于两个对象之间的某种碰撞,以允许用户决定要做什么。然后,Lua脚本可以根据需要更改对象状态,例如生成用于爆炸效果的新对象。

某些引擎将为每个调用创建和销毁新的Lua实例(新的lua_State对象),这意味着您无法创建全局的Lua变量并在调用之间保存它们,而其他引擎将使用相同的实例。因此,您可以创建自己的全局Lua变量,并对它们进行任意操作。这取决于您作为引擎编写者的决策。

将脚本添加到游戏中意味着您只需要考虑用户如何扩展您的引擎,并创建允许他们执行此操作的API,然后决定您如何实现此操作。

2014-04-21 04:36:34