在继续响应用户输入和渲染帧之前等待x秒

时间:2012-07-31 19:22:40

标签: .net xna lua wait luainterface

背景

我目前正在创建一个使用LuaInterface的XNA应用程序,以便我可以使用Lua scripts控制该应用程序。


我想要什么

我注意到很多事情可能会是时间和时间的关系。基于我的发展。这样的事情可能包括显示信息,然后在x秒后删除它如果需要x秒,结束游戏失败,或者甚至在中使用每隔x秒将相机放宽一定距离。我想在Lua中实现wait函数而不是我的应用程序,但在这一点上,我可以接受输入(因为我似乎无法让它工作)。


我迄今为止所做的事

inv.lua

 _G.Wait=(function(t)
    local dest=Time.ElapsedMilliseconds+t*1000
    while Time.ElapsedMilliseconds<dest do
        gel:UIUpdate()
    end
    return true
 end)

 --Aliases
 _G.wait=Wait

gELua.vb

Public Sub UIUpdate()
    Application.DoEvents()
    Game.Tick()
End Sub

(其中Game是我的XNA游戏对象)


那为什么我的想法不起作用?

目前的问题是,即使我每次都要调用Game.Tick()来保持一切正常,我的应用程序的XNA部分也会停止接收输入。


所以,我的问题是,有更好的方法吗?在我遇到用户输入问题之前,我认为它工作得很好。你们有没有实现过这样好的东西?

1 个答案:

答案 0 :(得分:3)

你想要的是你的游戏循环继续运行 - 但不要为对象调用“更新”(在lua脚本中)。如果每个对象都是不同的脚本,那么这很简单。 “等待(时间)”方法只会告诉您的游戏引擎“此”对象不希望在时间毫秒内更新。引擎会注意到向下并继续为所有其他脚本(对象)调用Update和Render。

下次更新/渲染“等待”对象时,它将跳过“更新”调用并仅调用渲染。超时到期时 - 您可以继续调用对象的Update。如果可能 - 您可以从暂停它的下一行继续执行Update方法。这将使脚本编写简单,就像C#“异步”方法一样。

当然 - 这在很大程度上取决于脚本如何与引擎的其余部分进行交互。如果描述的解决方案不适合您,我会要求您更详细地描述脚本与引擎的交互方式。