我正在努力将游戏引擎从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;
}
这有一些问题:
RunOneFrame
仅用于调试目的。TouchPanel.GetState()
或GamePad.GetState(PlayerIndex.One)
不会返回新值。有没有办法启动一个运行循环而不丢弃Game类以及它为初始化所做的一切?我还不知道如何在没有Game类的情况下如何,因为Windows Phone 7 XNA应用程序中没有Main()方法。它直接进入Game构造函数。
答案 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
}
}
我无法取消为什么你如此绝望地想要完全模态行为...这是某种新的“同步”教派吗? :)