是否有任何功能可以暂时冻结所有游戏或某个类?
我正在搜索Matlab中的Wait函数。
感谢。
编辑:等待功能在指定时间内停止所有处理。
答案 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检查窗口是否也处于活动状态。