2012-06-11 90 views
1

是否有任何功能冻结所有的游戏或某个类别片刻?冻结游戏

我正在寻找一个类似于Matlab的等待函数。

谢谢。

编辑:等待函数停止给定时间的所有处理。

+0

我不认为有一个内置的方式做到这一点,是因为它能够依赖于子系统。也许你想让逻辑和物理学冻结,但音乐应该继续播放。你将不得不在你自己的特定组件的更新逻辑中实现它。 – dowhilefor

+0

简单的Google不会在Matlab中显示“等待”功能的文档。你能否提供一个链接,以便我们确切地知道你在做什么?或者,更好的是,自己来形容它?你的问题有点含糊不清(有很多不同的方法可以“冻结”游戏)。 –

+0

作为dowhilefor说,我会在更新中实施阻止一些动画或输入(例如命中后)。 – Pilispring

回答

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

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

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和执行更新逻辑之前检查这一点。

+0

我会试试.. – Pilispring

1

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

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

if (isPaused) 
break; 

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