-1

我试过这个来在我的游戏中得分,我试过这个:

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

                score=score+10;

            }

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

4

2 回答 2

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);
   }
}
于 2013-10-13T13:01:59.080 回答
0

您需要更改游戏逻辑,以便在玩家靠近它时从“星星”集合中删除“星星”,或者将其标记为玩家已触摸。

根据游戏的逻辑,您也可以只让玩家在开始触摸星星时获得分数,而不是在他们仍在触摸星星时获得分数。你可以有一个布尔值,isTouchingStar如果你检测到玩家触摸它,则将其设置为 true。

于 2013-10-13T12:56:37.860 回答