【问题标题】:Game loop for Windows 8 store application in Xaml C#Xaml C# 中 Windows 8 商店应用程序的游戏循环
【发布时间】:2012-10-10 17:47:30
【问题描述】:

在设计 Windows 8 商店、回合制游戏应用程序 (XAML / C#) 时,我正在寻找一些指导。

每一回合,AI 执行一些任务,而玩家执行一些任务。这可以被视为状态机/固定工作流。

我可以考虑使用游戏循环 [1] 或在由用户输入触发的状态机中创建和跟踪每个状态 [2]:

[1]:
where(true)
{
    BeginTurn();
    AiDoSomething1();
    await PlayerInput1();

    AiDoSomething2();
    await PlayerInput2();
    EndTurn();
}

[2]:
void PlayerInput1()
{
    lock(_lock)
    {
        if(State == State.State1)
        {
            State = State.State2;
            AiDoSomething2();
        }
    }
}

void PlayerInput2()
{
    lock(_lock)
    {
        if(State == State.State2)
        {
           State = State.State1;
           EndTurn(); BeginTurn();
           AiDoSomething1();
        }
    }
}

对于使用 XAML/C# 的 Windows 8 商店应用程序,是否有一种众所周知的模式来处理这种情况?

【问题讨论】:

  • 您遇到了什么问题?你可以在你的虚拟机中坚持这种逻辑并且没有问题。
  • 第一次这样做,所以只是想看看这个问题是否有已知的模式。 [2] 很简单,但工作流程分散在各种用户输入功能中。那看起来不对。 [1] 等待用户输入,这是否意味着我需要将用户输入(例如,按钮单击)绑定到一个函数,该函数会触发我的 (await PlayerInput1) 正在等待的事件?

标签: c# xaml windows-8 windows-runtime windows-store-apps


【解决方案1】:

您可以使用VisualStateManager 控制您的视觉状态。使用它,您只需在 VM 中设置一个值,然后对视图中的视图状态做出反应。

【讨论】:

    【解决方案2】:

    不确定您是否指的是更字面意义上的游戏循环,但以防万一有人搜索,您可以通过以下三种方式在 Windows 8 中创建游戏循环:

    1. 使用 XNA/MonoGame 并完成它。需要承担很大的外部依赖
    2. 使用 CompositionTarget.Rendering。简单,但无法知道帧之间经过了多少时间
    3. 使用 MonoGame 的 GameTimer。使用幕后的最后一种方法和秒表来跟踪经过的时间。如果您不使用 XNA,这可能是您的最佳选择

    更多详情可以查看http://www.spottedzebrasoftware.com/blog/windows-8-game-loop.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      相关资源
      最近更新 更多