我怎样才能得到正确的分数?

时间:2013-10-13 12:50:12

标签: c# xna

我试过这个以获得我的游戏中的分数,我尝试了这个:

foreach (stella stella in stelle)
            if (stella.rettangolo.Intersects(giocatore.rect))
            {

                score=score+10;

            }

它起作用但不太好,因为如果我在恒星附近停留很长时间,即使不可见,分数也会继续增加。我该如何解决?

2 个答案:

答案 0 :(得分:3)

您可以添加一个额外的标记,告诉您星星是否已被拾取。这必须是stella类中的字段。我们称之为......

public bool captata; //I'll go with some Google translated Italian.

当关卡开始时,请使用值false初始化它:

foreach (stella stella in stelle)
{
    stella.captata = false;
}

当玩家与星星相交时,您可以适当地设置旗帜。同时,如果尚未拾取星星,则只检查碰撞。

foreach (stella stella in stelle)
   if ((!stella.captata) && (stella.rettangolo.Intersects(giocatore.rect)))
   {
       score=score+10;
       stella.captata = true;
   }

另一种方法是完全从星星系列中移除星星。

for (int i = stelle.Count - 1; i >= 0; --i)
{
   if (stelle[i].rettangolo.Intersects(giocatore.rect))
   {
       score = score + 10;
       stelle.RemoveAt(i);
   }
}

答案 1 :(得分:0)

你需要改变你的游戏逻辑,这样你就可以在玩家靠近它时从“星星”系列中移除“星星”,或者让你将其标记为玩家所触及。

根据游戏的逻辑,你也可以让玩家在开始触摸星星时获得积分,但不能在仍然触摸时获得积分它。你可以有一个布尔值isTouchingStar,如果你发现接触它的玩家就把它设置为真。