c++ - 在运行时环境中使用带有 Lua 的 C++
问题描述
我已经多次查看这个问题,以至于我确信在将 LUA 集成到我的 C++ 游戏引擎时,我错过了一个巨大的难题。我想要做的是运行我的游戏引擎,然后在它运行时我想点击我的 ui 并点击“添加脚本”,然后运行脚本。这部分很容易做到,但我不明白的是,看似使用 lua_dofile 运行的脚本如何具有获取鼠标输入或根据输入移动字符的代码。无论如何,我看不到有效地做到这一点。我应该允许每帧创建和销毁 LUA 状态还是让脚本每帧触发?在这样的应用程序中:
void init();
void update();
void render();
void end();
我将如何使用 LUA 来控制实体的移动。
假设我设置了 lua 状态,以便您可以编写这样的 lua 代码:
entity1 = Entity.new()
entity1:setPosition(4,5)
我如何从鼠标给脚本一些输入以将实体移动到鼠标位置?
我的首要问题是让脚本控制我的实体的最佳方式是什么
解决方案
举一个具体的例子,假设你想在玩家点击鼠标时将球传送给他们。以下是您可以在 Lua 中编写的内容:
local function clickHandler(event)
local x, y, z = event.player:getCoords()
local ball = event.world:getBall()
ball:teleportTo(x, y, z)
end
game.registerEventHandler('click', clickHandler)
要使该示例在您的引擎中实际运行,您需要执行以下操作:
- 创建一个
registerEventHandler
函数,将给定的回调保存在 C 可以访问的地方 - 创建一个
getCoords
返回给定玩家坐标的函数 - 创建一个
getBall
在你的游戏世界中获得球的函数 - 创建一个
teleportTo
将实体传送到给定位置的方法 - 每当玩家单击鼠标时,使用包含玩家和游戏世界的对象运行
click
您保存的所有事件处理程序event
特别是对于这个问题:
我应该允许每帧创建和销毁 LUA 状态还是让脚本每帧触发?
不。您在游戏开始时创建一个lua_State
,在其中加载脚本,然后继续使用该状态来调用事件处理程序。
推荐阅读
- r - 使用 dput 从 R 环境中将表格转换为 .md 格式
- git - 使用 Git 传达拉取请求的相关更改与向经理显示临时更改
- scala - Scala - 发现错误类型不匹配:需要 List[String]:scala.collection.IterableOnce[Nothing]
- javascript - 使用 XSLT 动态添加 XML 标记,并且不应根据 xml 中特定标记的计数允许重复
- javascript - 哪个javascript函数将返回数组中阈值以下的值的数量
- python - 获取 NaN 以将每行值除以行总和
- database - Criteria API 在 Map 中查找键值对
- swift - 如何使 navigationItem 标题成为 VoiceOver 读取的第一个元素?
- java - 如何使用 Jackson 检查和打印 JDI Value 对象?
- google-apps-script - 从文本和超链接字符串中提取指向 URL 和文本的超链接