我目前正在创建一个使用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部分也会停止接收输入。
所以,我的问题是,有更好的方法吗?在我遇到用户输入问题之前,我认为它工作得很好。你们有没有实现过这样好的东西?
答案 0 :(得分:3)
你想要的是你的游戏循环继续运行 - 但不要为对象调用“更新”(在lua脚本中)。如果每个对象都是不同的脚本,那么这很简单。 “等待(时间)”方法只会告诉您的游戏引擎“此”对象不希望在时间毫秒内更新。引擎会注意到向下并继续为所有其他脚本(对象)调用Update和Render。
下次更新/渲染“等待”对象时,它将跳过“更新”调用并仅调用渲染。超时到期时 - 您可以继续调用对象的Update。如果可能 - 您可以从暂停它的下一行继续执行Update方法。这将使脚本编写简单,就像C#“异步”方法一样。
当然 - 这在很大程度上取决于脚本如何与引擎的其余部分进行交互。如果描述的解决方案不适合您,我会要求您更详细地描述脚本与引擎的交互方式。