gpt4 book ai didi

c++ - 编程语言究竟如何与脚本语言交互?

转载 作者:行者123 更新时间:2023-11-28 00:30:20 24 4
gpt4 key购买 nike

好吧,假设您用 C++ 设计了一个游戏并使用了 Lua,以及该游戏的 C++ 部分与 Lua 代码交互的具体情况。我最难理解的主要问题是:

  1. lua代码在编译的时候是不是转成了c++对象?

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

  3. lua 代码是否依赖于 c++ 代码,因为它使用 c++ 代码中的函数?

  4. lua代码的内存是和c++代码的内存整合还是完全不同的过程。

最佳答案

对于 4 个问题的简单回答:(1) 否 (2) 是 (3) 可能 (4) 综合。

多一点讨论可能会有帮助。

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

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

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

有些引擎会为每次调用创建和销毁新的 Lua 实例(新的 lua_State 对象),这意味着您不能创建全局 Lua 变量并在调用之间保留它们,其他引擎将使用相同的实例,因此您可以创建自己的全局 Lua 变量和和他们一起做你想做的事。这取决于引擎编写者。

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

关于c++ - 编程语言究竟如何与脚本语言交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23189690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com