LibGDX 碰撞评分系统持续增加

LibGDX Collision scoring system increases continuosly

我正在开发游戏。当我的主角与星(点)相交时,我应该得到 1 分。 我使用 Intersector.overlaps 但当两者相交时,分数会不断增加,直到它们不相互接触。我该如何解决?我初始化了 int score = 0,这里是我的碰撞代码,

(starAvailable = 我正在碰撞后从屏幕上移除星星。这对得分来说不是重要的事情。)

            if (Intersector.overlaps(charCircle,starCircles1[i])) {
                starAvailable1=false;
                    score++;
            }

For example, when i intersect with a star, score is becoming like this

(starAvailable = I am removing star from screen after collision. Not an important thing for scoring.)

其实很重要。执行此操作的最简单和最有效的方法是在更改乐谱之前或之后直接删除(或移出可见区域,禁用......无论您正在做什么以节省内存)星星,因此请确保您不会触发进一步的碰撞。没有足够的代码知道如何在您的项目中执行此操作,但是类似...

if (Intersector.overlaps(charCircle,starCircles1[i])) {
            //starAvailable1=false;
            removeStarFromField(); // we disable the collider, stop rendering,
                                   // or remove the star
            score++;
}

作为一个不太有效的替代方案,但如果您没有太多使用 LibGdx 的经验并且您的明星有某种唯一标识符或者您可以将其添加到其中,则可能更容易获得,您是否可以存储与哪些星星相撞(或者如果您已经与一颗特定的星星相撞,如果您正在缓存它们)。一旦你与星星相撞,你就会缓存那个标识符。然后你应该检查你命中缓存的 id,如果它在那里,你不应该增加分数,类似于:

// somewhere else...
Set<String> identifiersFromAlreadyHitStars = new HashSet<>();

....

// then your actual collision detection method
if (Intersector.overlaps(charCircle,starCircles1[i])) {
            if(!identifiersFromAlreadyHitStars.contains(hitStar.identifier){
        score++;
       identifiersFromAlreadyHitStars.add(hitStar.identifier)
  }
}

我通过添加starCircles[i].setX(1500).

解决了
            if (Intersector.overlaps(charCircle,starCircles1[i])) {
            starAvailable1=false;
            starCircles1[i].setX(1500);
            score++;
        }

星星不断的来,每次循环更新,所以循环后circle的setX值又在更新。

现在每次星星碰撞得分增加1。