使用LinkedList中的sprite检测碰撞

时间:2012-10-02 22:48:50

标签: java android andengine

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

我正在使用动画精灵,并使用动画侦听器知道动画何时结束或最后一帧。

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

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

我正在使用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);

                }
              }
            }

          }

        }));

这种方法的问题在于,如果炸弹精灵与Iterator中不存在的可移动精灵碰撞,那么它就不会检测到碰撞,也不会发生任何事情。我需要能够在发生碰撞时删除该特定的可移动精灵

有没有人知道或有任何建议让它发挥作用?

2 个答案:

答案 0 :(得分: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);
                }
            }
    }
});

我认为性能打击应该可以忽略不计。

答案 1 :(得分:0)

如果我正确理解了这个问题,你就不会浏览List,这就是为什么你试图只用一个元素来检测碰撞。尝试:

while (woodSprites.hasNext()) {
    if (bombSprite.collidesWith(woodSprites)) {
        Log.e("Frame", "Collision");
        removeFace(woodSprites);
    }
}