gpt4 book ai didi

c - 如何在游戏引擎中使用全局 lua_State *?

转载 作者:行者123 更新时间:2023-12-03 17:23:18 25 4
gpt4 key购买 nike

在我的引擎中,目前,每个实体都有自己的 lua_State * 链接到它。实体基类有一个函数 linkScript(const char *scriptPath)将调用 luaL_dofile(luaState, scriptPath) .所有这些工作都很好,但游戏仍然很小。我一直在阅读,我注意到我正在做的事情被认为是不好的做法。建议我有一个全局lua_State *并将所有函数加载到全局内存中。起初,我对自己说“好吧,够简单”,但很快我就遇到了一个问题:每个 Lua 文件都定义了自己的 init() , tick()并应用一些 EventHooks。如何分享全局lua_State *没有每个脚本覆盖之前脚本对这些函数的定义?这些函数在每一帧和/或每次触发事件时被调用。我需要能够区分每个脚本的实现。

最佳答案

您基本上希望将每个脚本视为具有自己功能的对象。当您加载脚本并运行它时,您不希望它的函数进入全局命名空间,而是进入特定于它的表中,并拥有一个存储所有此类表的全局表。

有很多方法可以做到这一点,但想到的一种是:您创建一个全局表 allObjects,然后为您执行的每个脚本:

-- object1Script.lua
allObjects.object1 = {
init = function()
...
end,
tick = function()
...
end
}

您对每个脚本执行上述操作,但每个脚本都会在 allObjects 中创建不同的条目。表, object1对于第一个脚本, object2对于第二个脚本等。如果您不想命名脚本,您可以使用数组,即 allObjects.insert( { ... table of init, tick etc functions ...} ) .大概你会循环遍历 allObjects 表以适本地调用每个“对象”的 init() 或 tick() 等。

我认为以上是基本方法,希望它能激发您找到自己的方法。

关于c - 如何在游戏引擎中使用全局 lua_State *?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20554600/

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