2017-02-26 56 views
0

遊戲應該凍結每獲得200分,並且會出現一個測驗。回答後,遊戲應該繼續。 在我的代碼中,它只發生一次。在將freezescore增加到400以便下一個測驗出現之後,遊戲不會凍結。更新中的功能只被調用一次

public static int freezescore = 200; 

void Update() 
{ 
    if (score == freezescore) 
    { 
     freeze(); 
     Quiz(); 
     Debug.Log("" + freezescore); 
    } 
} 

public bool freeze() 
{ 
    Time.timeScale = 0.1f; 
    return true; 
} 

public void Quiz() 
{ 
    if (freeze() == true) 
    { 
     if (canvasquiz != null) 
     { 
      canvasquiz.SetActive(true); 
     } 

    } 
} 

//Attached this method to the button 
public void Resume() 
{ 
    if (canvasquiz != null) 
    { 
     canvasquiz.SetActive(false); 
     Time.timeScale = 1.0f; 
    } 

    score = score + 1; 
    freezescore = freezescore + 200; 
} 
+0

爲什麼你需要'freeze()'返回'bool',如果它總是返回true。你可以使它成爲'void'.Also,你能展示如何調用Update()方法嗎? –

+1

這是一個MonoBehavior嗎?更新被調用每一幀?一般來說,這整個設置有一個難聞的氣味 - 我期望你試圖創建的行爲是事件驅動而不是每幀。無論如何 - 你是否設置了斷點?當腳本失敗時,freezescore的實際價值是什麼?條件評估的是什麼? – Drakestar

+2

您也調用了freeze()兩次:一次在Quiz()之前,然後在Quiz()中再次。這沒有意義。也許你想設置一個字段布爾值爲true,然後檢查對嗎? – Drakestar

回答

1

老實說,我將改寫這一點了:

private int freezeScore; 
private int score; 

private void Update() 
{ 
    if (score >= freezeScore) 
    { 
     StartQuiz(); 
    } 
} 

public void StartQuiz() 
{ 
    Time.timeScale= 0; 
    if (canvasquiz != null) 
    { 
     canvasquiz.SetActive(true); 
    } 
} 

//Attatch to button 
public void EndQuiz() 
{ 
    if (canvasquiz != null) 
    { 
     canvasquiz.SetActive(false); 
     Time.timeScale = 1.0f; 
    } 
    score += 1; 

    freezeScore += 200; 
} 

這是未經測試的,因爲我不把所有的代碼,所以你可能需要修改了一點,但我希望你明白了。

有跡象表明,事情可能沒有工作,你有他們的方式有幾個原因:

Update功能將意味着如果玩家在任何時候獲得了超過一個點,則他們可能會錯過if (score == freezescore) 200,400或600等,這意味着Quiz不會觸發。

此外,我不知道爲什麼freeze函數返回一個布爾值,並在總是返回true時進行檢查。 Quiz中的if (freeze() == true)聲明將始終爲真。您只需在Quiz函數中設置時間刻度即可。