首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Lua在C++中创建计时器

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

Stack Overflow用户
提问于 2010-09-22 09:20:24
回答 2查看 803关注 0票数 0

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

假设我在Lua中注册了以下函数:

代码语言:javascript
复制
lua_register(L, "createTimer", createTimer);
lua_register(L, "getCondition", getCondition);
lua_register(L, "setAction", setAction);

其中:(将类型检查抛在脑后)

代码语言:javascript
复制
int createTimer(lua_State* L){
    string condition = lua_tostring(L, 1);
    string action = lua_tostring(L, 2);
    double timer = lua_tonumber(L, 3);
    double expiration = lua_tonumber(L, 4);

    addTimer(condition, action, timer, expiration); // adds the "timer" to a vector or something
 return 1;
}

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

代码语言:javascript
复制
createTimer("getCondition=<5", "setAction(7,4,6)", 5, 20);

然后,我可以执行以下操作(?):

代码语言:javascript
复制
// 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)
        }
    }
}

这样行得通吗?luaL_doString是否会将"getCondition=<5“传递给lua状态引擎,在那里它将调用c++函数getCondition(),然后查看它是否为=<5并返回true或false?luaL_doString(L,"setAction(7,4,6)“)也是如此吗?

此外,这是不是一种合适的方式来创建计时器,只访问lua一次(创建它们),让c++处理其余的事情,只通过lua调用c++函数,让lua只处理逻辑?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-22 12:00:23

您可能希望将条件字符串更改为"return getCondition()<=5",否则字符串块将无法编译或运行。然后,当luaL_doString()成功返回时,检查堆栈上的布尔返回值。如下所示:

代码语言:javascript
复制
// 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);
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2010-09-23 00:40:09

您不能在Lua运行时中断它。您可以做的最好的事情是设置一个标志,然后在安全的时间处理中断。独立解释器使用这种技术来处理用户中断(control-C)。这项技术也用在我的lalarm库中,它可以用来实现计时器回调,尽管不是在您想要的高级别。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3765678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档