在XNA中创建第二个runloop

时间:2011-03-12 21:41:08

标签: c# windows-phone-7 xna xna-4.0

我正在努力将游戏引擎从Java移植到Windows Phone 7 XNA。我正在努力的一件事是如何创建模态对话框。该对话框使用SpriteBatch在XNA中呈现,就像其他所有内容一样,但我基本上想要的是这样的:

result = Dialog.Ask("Some Question?", DialogButtons.YesNo);

在用户点击其中一个按钮之前,Dialog.Ask不会返回。我唯一能做到的就是在游戏中不断调用RunOneFrame()的方法:

private int runLoopCount;
public void BeginRunLoop() {
  int runIndex = ++runLoopCount;
  while (runLoopCount == runIndex) {
    RunOneFrame();
    Thread.Sleep(1);
  }
}

public void EndRunLoop() {
  --runLoopCount;
}

这有一些问题:

  1. RunOneFrame仅用于调试目的。
  2. 输入不起作用!致电TouchPanel.GetState()GamePad.GetState(PlayerIndex.One)不会返回新值。
  3. 有没有办法启动一个运行循环而不丢弃Game类以及它为初始化所做的一切?我还不知道如何在没有Game类的情况下如何,因为Windows Phone 7 XNA应用程序中没有Main()方法。它直接进入Game构造函数。

1 个答案:

答案 0 :(得分:0)

你想要做的是添加另一个'状态',你只需要显示对话框,直到用户不选择某个东西......并_modalDialogIsUp布尔...

    protected override void Update(GameTime gameTime)
    {
        if (_modalDialogIsUp)
        {
            // handle only secesary mouse and button clicks
        }
        else
        {
            // normal mouse and button clicks
        }
    }

    protected override void Draw(GameTime gameTime)
    {
        if (_modalDialogIsUp)
        {
            // draw only modal dialog
        }
        else
        {
            // draw game
        }
    }

我无法取消为什么你如此绝望地想要完全模态行为...这是某种新的“同步”教派吗? :)