冻结游戏
本文关键字:游戏 冻结 | 更新日期: 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来检查窗口是否也处于活动状态。