我试过这个来在我的游戏中得分,我试过这个:
foreach (stella stella in stelle)
if (stella.rettangolo.Intersects(giocatore.rect))
{
score=score+10;
}
它起作用但效果不佳,因为如果我在星星附近停留很长时间,即使看不到,分数也会继续增加。我该如何解决?
您可以添加一个额外的标志,告诉您星星是否已被拾取。这必须是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);
}
}
您需要更改游戏逻辑,以便在玩家靠近它时从“星星”集合中删除“星星”,或者将其标记为玩家已触摸。
根据游戏的逻辑,您也可以只让玩家在开始触摸星星时获得分数,而不是在他们仍在触摸星星时获得分数。你可以有一个布尔值,isTouchingStar
如果你检测到玩家触摸它,则将其设置为 true。