2010-05-02 51 views
0

我正在關注XNA教程,並具有以下用於碰撞檢測的代碼(檢測子彈是否與目標碰撞)。基本上我正在尋找增加一個分數變量來顯示屏幕上的分數,而不用重新編寫整個程序。無論我把它放在這個方法中的哪個位置,它似乎都從目標數量開始遞增,而不是從零開始遞增。有什麼簡單的我在這裏失蹤?任何幫助將不勝感激。謝謝。在XNA遊戲中保持分數

private CollisionType CheckCollision(BoundingSphere sphere) 
{ 
    if (completeCityBox.Contains(sphere) != ContainmentType.Contains) 
     return CollisionType.Boundary; 

    for (int i = 0; i < targetList.Count; i++) 
    { 
     if (targetList[i].Contains(sphere) != ContainmentType.Disjoint) 
     { 
      targetList.RemoveAt(i); 
      i--; 
      AddTargets(); 
      return CollisionType.Target; 
     } 
    } 

    return CollisionType.None; 
} 
+0

你的分數變量在哪裏?何時/何時初始化?並遞增? – tzaman 2010-05-02 23:07:03

+0

它在類的頂部初始化,但希望在此方法內增加它。 int score = 0; (頂部課程) 得分+ = 1; (希望在某處添加此方法) 這是用於檢測與目標碰撞的方法,因此每次檢測到碰撞時我都會將得分提高1。分數不從0開始,它從完全隨機的目標數量(例如:1250)開始。 – Seven 2010-05-02 23:17:31

回答

0

假設你不是遞增/其他地方分配的得分變量,它的初始化過程中設置爲零,我能想到的唯一的另一件事是,在某種程度上你觸發了所有的碰撞你對象 - 有可能以某種方式,也許在設置階段?你有沒有嘗試在你的分數增量線上設置一個斷點來查看它何時被擊中?

2

您可以簡單地擁有一個名爲OnCollision()的獨立方法來更新分數(如果您想以後可以爲您執行任何物理),並且在您的Update方法中只需要一個if語句來檢查衝突。例如:

if(CheckCollision() == CollisionType.Target) 
{ 
    OnCollision(); 
} 

希望有所幫助。

0

,如果你在你的類的頂部草簽它,如果聲明這聽起來像碰撞必須與第一次的所有項目將發生僅增加它在第二位。

沒有代碼的其餘部分,它可能很難確定,但例如在AddTargets函數中,如果它們以相同位置開始,然後進行調整,則可能在檢查到碰撞時它們全部合格,或者這種性質的東西。

如上所述,在更新分數時設置斷點 - 如果需要,通過屬性更新它並在屬性上設置斷點,以便您可以看到被調用的位置並追蹤它被調用的原因。如果在實際發生碰撞之前它的值從0到250,那麼應該很容易找出錯誤更新計數器的位置,因爲它聽起來發生在你期望成爲第一次碰撞之前,因此增加前250個點。