2012-06-11 89 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檢查窗口是否處於活動狀態。