1

嘿,伙计们,这是我的困境。

我有一个动画精灵,我正在使用它并使用动画侦听器来了解动画何时完成或其最后一帧。

当动画在最后一帧时,我想删除它碰撞的任何对象。

所以这是我现在遇到的问题:

我正在使用 TimeHandler 来检测碰撞,但问题是我将随机数量的可移动对象添加到游戏中,并且我将它们添加到 LinkedList,因为它们在加载期间添加到场景中。

然后在我的 TimeHandler 中,我尝试像这样检测碰撞;

   mEngine.registerUpdateHandler(new TimerHandler(.005f, true,
        new ITimerCallback() {
          @Override
          public void onTimePassed(final TimerHandler pTimerHandler) {

            if (frames == 1) {

              if (woodSprites.hasNext()) {

                Sprite sprite = woodSprites.next();
                if (bombSprite.collidesWith(sprite)) {
                  Log.e("Frame", "Collision");
                  removeFace(sprite);

                }
              }
            }

          }

        }));

这种方法的问题在于,如果炸弹精灵与迭代器中不是下一个的可移动精灵发生碰撞,那么它不会检测到碰撞并且不会发生任何事情。我需要能够在发生碰撞时移除特定的可移动精灵

有谁知道或有任何建议让这个工作?

4

2 回答 2

3

我看不出使用 TimerHandler 的理由,因为它可能会一直丢失正确的帧,因此它的性能可能非常糟糕。你这样做是为了提高性能吗?试试这个代码:

mEngine.registerUpdateHandler(new IUpdateHandler() {

    @Override
    public void reset() {}

    @Override
    public void onUpdate(float pSecondsElapsed) {
        if (frames == 1) {
            for (Sprite s : woodSprites) {
                if (bombSprite.collidesWith(s)) {
                    removeFace(s);
                }
            }
    }
});

我认为对性能的影响应该可以忽略不计。

于 2012-10-03T09:39:17.720 回答
0

如果我正确理解了这个问题,那么您就不会浏览列表,这就是您尝试检测仅与一个元素发生冲突的原因。尝试:

while (woodSprites.hasNext()) {
    if (bombSprite.collidesWith(woodSprites)) {
        Log.e("Frame", "Collision");
        removeFace(woodSprites);
    }
}
于 2012-10-03T09:33:56.153 回答