【问题标题】:Waiting x seconds before continuing while continuing to respond to user input and render frames在继续响应用户输入和渲染帧之前等待 x 秒
【发布时间】:2012-07-31 19:22:39
【问题描述】:

背景

我目前正在创建一个使用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 部分停止接收输入。


所以,我的问题是,有没有更好的方法来做到这一点?在遇到用户输入问题之前,我认为它运行良好。你们有没有人实施过这样的东西,效果很好?

【问题讨论】:

  • 整个脚本会“等待”指定的时间吗?例如,“toast.lua”是一个单独的脚本,比如“someentity.lua”?
  • 它确实等待正确,即使来自其他脚本也是如此,因为我将该函数添加到全局表中。

标签: .net xna lua wait luainterface


【解决方案1】:

您想要的是让您的游戏循环继续运行 - 但不要为对象调用“更新”(在 lua 脚本中)。如果您的每个对象都是不同的脚本,那么这相当简单。 “Wait(time)”方法只会告诉您的游戏引擎“this”对象不想在 time 毫秒内更新。引擎将记录下来并继续为所有其他脚本(对象)调用更新和渲染。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    • 2020-01-18
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多