1

是否有任何功能可以冻结所有游戏或某个课程片刻?

我正在寻找像 Matlab 中的等待函数。

谢谢。

编辑:等待功能在给定时间内停止所有处理。

4

3 回答 3

2

如果您的游戏基于 GameComponents,您通常可以将 Enabled 标志设置为 false 以防止执行更新逻辑,这显然取决于其他因素(类更新逻辑之外的对象操作,在绘图中执行的更新逻辑或其他方法等..)

public class Car : GameComponent
{
    // This logic is only called if the Enabled property is set to true.
    public override void Update(GameTime gameTime)
    {
        base.Update(gameTime);
    }
}

如果您没有使用游戏组件,那么在您的类中引入一个启用标志并在执行更新逻辑之前检查它会非常简单。

于 2012-06-11T12:53:12.773 回答
2

单行破解方法是在主 Update() 中调用 Thread.Sleep(x),但这会在指定的时间内挂起游戏。用户会认为您的应用程序已无响应,他可能会杀死它并重新启动它!这可能不是你想要的。

我构建游戏的方式是,每个主要组件都有自己的 Update()(或 Tick())方法,每个逻辑更新都会调用该方法。您可以通过暂时不调用它们的 Update() 来选择性地冻结组件。有些事情你肯定不想冻结,比如刷新屏幕、响应用户输入或声音处理。

一些示例代码:

// To pause the game for x number of frames, set pauseDelay = to x
int pauseDelay;

public void Update() {
     if (pauseDelay > 0) {
         --pauseDelay;
     }
     else {
         physics.Update();
         ai.Update();
     }
     input.Update();
     sound.Update();
}
于 2012-06-11T18:01:41.923 回答
1

如果您正在寻找一种非常简单的方法(安迪似乎更好,但这是一种快速的方法)

在您的更新方法类中,在顶部添加:

if (isPaused)
break;

您可以使用 isActive 检查窗口是否也处于活动状态。

于 2012-06-11T17:44:23.287 回答