2013-04-22 102 views
0

最近引起了我的注意,在遊戲更新循環中,函數在另一個更新循環之前不會完全運行。例如:更新循環說明

void update() 
{ 
function 1; 
function 2; 
} 

在函數1或函數2完全運行之前會調用另一個更新循環。 是這樣嗎?因爲我一直認爲它在功能運行結束之前不會再循環。 由於我從來沒有教過這個,直到最近從來沒有看過這個,我從來沒有編寫這個想法。 我覺得這很奇怪,因爲現在看來,如果我想要一段代碼在每一幀上運行,我必須將代碼從字面上放到更新循環中。 e.g

void update() 
{ 
int i = 0; 
int j - 0; 
etc //the contents of function a 
} 

我這個問題是,這肯定將停止多態性和封裝?在我將創建一個函數而不是重複一段代碼的方式。

我是否正確,如果有的話,爲什麼?

+0

不太清楚你正在談論什麼編程語言,但通常你會有一個void frame(){do this}函數完成每次調用。這不是你所聽到的。 – 2013-04-22 12:57:17

+0

上面講的代碼是C#XNA遊戲工作室,但是問題出現在UnityScript上並且有關於GUI的功能 – SD1990 2013-04-22 15:51:34

回答

1

正如評論,我不確定你正在使用的編程語言。

  1. 但是,你正在處理的re-entrant/non-re-entrant的情況。當發出信號時,電流將被「保持」,並且信號的動作將被調用(將其作爲中斷讀取)。如果信號的作用是調用相同的函數(在你的情況下更新函數),那麼你可以在同一個線程中保持並再次調用。

  2. 如果你的系統是多線程的話,還有一種可能性。那麼你當前的線程執行路徑可以被保持,任何其他的線程執行都可以被調用。這反過來可以再次調用更新函數。

這兩個都是非常有名的基礎計算機科學概念,被稱爲函數的重入和線程安全性。這個book (APIU)個人是一本了不起的書 - 嘗試獲得它的副本。