2010-05-02 199 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个点。