我试过这个以获得我的游戏中的分数,我尝试了这个:
foreach (stella stella in stelle)
if (stella.rettangolo.Intersects(giocatore.rect))
{
score=score+10;
}
它起作用但不太好,因为如果我在恒星附近停留很长时间,即使不可见,分数也会继续增加。我该如何解决?
答案 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
,如果你发现接触它的玩家就把它设置为真。