冻结游戏

本文关键字:游戏 冻结 | 更新日期: 2023-09-27 18:36:51

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

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

谢谢。

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

冻结游戏

单行技巧是在主 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();
}

如果你的游戏基于游戏组件,你通常可以将 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);
    }
}

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

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

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

if (isPaused)
break;

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