Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中创建计时器+;使用Lua_C++_Lua - Fatal编程技术网

C++ 在C+中创建计时器+;使用Lua

C++ 在C+中创建计时器+;使用Lua,c++,lua,C++,Lua,我想知道以下设置是否适用于小游戏: 假设我向Lua注册了以下函数,如下所示: lua_register(L, "createTimer", createTimer); lua_register(L, "getCondition", getCondition); lua_register(L, "setAction", setAction); 其中:(保留类型检查) 通过以下方式在lua中调用此函数: createTimer("getCondition=<5", "setAction(7,

我想知道以下设置是否适用于小游戏:

假设我向Lua注册了以下函数,如下所示:

lua_register(L, "createTimer", createTimer);
lua_register(L, "getCondition", getCondition);
lua_register(L, "setAction", setAction);
其中:(保留类型检查)

通过以下方式在lua中调用此函数:

createTimer("getCondition=<5", "setAction(7,4,6)", 5, 20);

createTimer(“getCondition=您可能希望将条件字符串更改为
”return getCondition()您不能在Lua运行时中断它。您最好设置一个标志,然后在安全时间处理中断。独立解释器使用此技术处理用户中断(control-C)这个技术也被用在我的库中,它可以用来实现定时器回调,虽然不是在你想要的高级别。

OK,但是这个设置在全球范围内会很好地工作,还是会有更好的/更快的方式让Lua在C++中创建定时器,或者这个设置是好的吗?其次,**->条件实际上对向量工作。(如果我没有误认为只有*it->first*it->second才行?如果真是这样,用什么样的结构来存储数据才是最好的呢?我最初的反应是创建一个结构并简单地用这些结构填充一个向量,但这感觉不对:回答另一个问题?不要认为我暗示了任何我想插入的地方。)鲁普·卢阿,无论如何还是谢谢你:)我想是因为你用定时器。
createTimer("getCondition=<5", "setAction(7,4,6)", 5, 20);
// this function is called in the game-loop to loop through all timers in the vector
void checkTimers(){
    for(std::vector<T>::iterator it = v.begin(); it != v.end(); ++it) {
        if(luaL_doString(L, *it->condition)){
            luaL_doString(L, *it->action)
        }
    }
}
// this function is called in the game-loop to loop through all timers in the vector
void checkTimers(){
    for(std::vector<T>::iterator it = v.begin(); it != v.end(); ++it) {
        lua_settop(L, 0);
        if(luaL_doString(L, *it->condition) == 0 && lua_toboolean(1)){
            luaL_doString(L, *it->action);
        }
    }
}