2012-04-11 77 views
0

我想在遊戲中增加一個圈數計數器,但因爲我必須將這些代碼放在遊戲循環中,所以我的計數器每次都會增加大約500取而代之還是向上移動。這是我的代碼。當檢查點通過時,checkpointPassed變量僅爲真。我知道這工作和檢查點數量是當前的檢查點,並從0開始。我想在一個while循環中增加一個計數器C++

if(checkpointNumber == 0 && checkpointPassed == true) 
{ 
    lapNumber += 1; 
} 

我不能發佈的遊戲循環,因爲它是相當大的。

任何幫助表示讚賞。

編輯

下面是一些更多的代碼,所以你可以看到什麼,我試圖做的。

if(distance > carRadius && markerCounter < 5000) 
{ 
    if(checkpointPassed == true) 
    { 
     markerCounter++; 
    } 
} 
if(checkpointNumber == 0 && checkpointPassed == true) 
{ 
    lapNumber += 1; 
} 
if(distance < carRadius) 
{ 
    markerCounter++; 
    cross->SetX(checkpointX); 
    cross->SetY(checkpointY); 
    cross->SetZ(checkpointZ); 
    checkpointNumber += 1; 
    checkpointPassed = true; 
} 
if(markerCounter > 4999) 
{ 
    checkpointPassed = false; 
    cross->SetPosition(0,-50,0); 
    markerCounter = 0; 
} 
+0

我不認爲你給了我們足夠的上下文來回答你的問題。你有沒有把checkpointPassed設置爲false? – mydogisbox 2012-04-11 17:04:18

+0

@mydogisbox在不同if語句中將其設置爲false – bobthemac 2012-04-11 17:09:01

+0

@bobthemac您需要顯示更多相關代碼。 – Marlon 2012-04-11 17:11:20

回答

1

添加另一個名爲inCheckpoint的變量,該變量存儲用戶當前是否在檢查點「內部」。這允許您檢測用戶何時進入檢查點,然後只增加lapNumber。該代碼將如下所示:

if(checkpointNumber == 0 && checkpointPassed == true) 
{ 
    if (inCheckpoint == false) /* previously not inside a checkpoint */ 
     lapNumber += 1; 
    inCheckpoint = true; 
} 
else 
{ 
    inCheckpoint = false; 
} 

更新:不要依賴於checkpointPassed

if(distance < carRadius) 
{ 
    if (inCheckpoint == false) /* previously not inside a checkpoint */ 
     lapNumber += 1; 
    inCheckpoint = true; 
} 
else 
{ 
    inCheckpoint = false; 
} 
+0

這不起作用仍然會計算在它上面,它每秒運行1000次循環。 – bobthemac 2012-04-11 17:52:14

+0

上面的代碼是「每秒很多循環」的證據。 :)我擔心你檢測檢查點的代碼不正確。如果'distance user1202136 2012-04-11 17:59:11

+0

我想你誤解了代碼是正確的,因爲它只是在距離比使用一些向量數學來計算兩個對象之間的距離更小時纔會改變。 – bobthemac 2012-04-11 18:04:58

0

您可以設置/傳遞一個gueard值,該值指示遊戲循環中有多少次迭代(或者這是否是第一次迭代)。如果這是第一次迭代(在當前圈內),則按照現在的步驟增加變量,否則不要

您需要重置每圈的此保護值 - 例如,在你增加lapNumber之後。

0

您可能需要取消'checkpointPassed`狀態。

if (checkpointNumber == 0 && checkpointPassed == true) 
{ 
    lapNumber += 1; 
    checkpointPassed = false; 
} 

這意味着,你將不會被再次計數圈的下一次檢查站通過,這大概是當你需要它纔會計算。

但是,如果你需要checkpointPassed真正的循環後,那麼你就需要考慮是否需要另一個變量,如lapCounted,當checkpointPassed設置爲true被設置爲false,並重置爲true通過上面的代碼(而不是設置checkpointPassed,而不是設置它)。

+0

這可能是解決方案,我們沒有足夠的信息來了解。 – CashCow 2012-04-11 17:13:45

+0

@CashCow:同意沒有太多的信息可以繼續,雖然編輯的問題更好,強烈暗示需要某種額外的變量。回答關於SO的問題的技巧之一是試圖在兩條線之間進行閱讀,以確定真正存在的問題。 – 2012-04-11 17:15:57

+0

這會導致代碼中的其他錯誤。 – bobthemac 2012-04-11 19:01:01

0

如果我正確理解你說的話,你的「如果」語句是主循環內,並且當你通過一個檢查點,'checkpointPassed'成爲true。多長時間?

如果它在幾次迭代中保持「真」,那麼每當您的遊戲循環進行一次迭代時,您的圈數計數器就會遞增。在這種情況下,您應該在迭代結束時將checkPointPassed設置爲false,或者使用另一個變量,在checkPointPassed同時變爲true和false時,將其設置爲true。

如果這不能回答你的問題,你可以給出更多的上下文,因爲只有這部分代碼,很難弄清楚你想要做什麼。

相關問題