编程语言如何与脚本语言进行交互?
好的,假设你使用C ++设计了一个游戏,同时使用了Lua,那么C ++部分如何与Lua代码交互。我最困惑的主要问题是:
编译时,Lua代码是否转换为C ++对象?
Lua代码是否根据C ++代码的要求编译?
Lua代码是否依赖于C ++代码,即它使用C ++代码中的函数?
Lua代码的内存是否与C ++代码的内存集成,或者它是完全不同的过程。
对于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,然后决定您如何实现此操作。
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
在编译时,Lua 代码会转化为指令,由解释器来执行。
不会转化为 C++ 对象。
Lua 代码是否按照 C++ 代码的要求进行编译?
是的。
Lua 代码是否依赖于 C++ 代码,即它是否使用从 C++ 代码中的函数?
可以使用,但不必要。您可以决定从 Lua 中提供哪些 C/C++ 变量和函数。
Lua 代码的内存是否与 C++ 代码的内存集成,还是完全不同的进程?
集成,同一个进程。