冻结游戏

时间:2012-06-11 11:35:21

标签: c# xna

是否有任何功能可以暂时冻结所有游戏或某个类?

我正在搜索Matlab中的Wait函数。

感谢。

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

3 个答案:

答案 0 :(得分: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);
    }
}

如果你没有使用游戏组件,那么在你的clases中引入Enabled标志并在执行更新逻辑之前检查它是非常简单的。

答案 1 :(得分: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();
}

答案 2 :(得分:1)

如果你寻找一种非常简单的方式(Andy看起来更好,但这很快)

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

if (isPaused)
break;

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