2013-04-15 46 views
0

我正在AndEngine中开发一款游戏,并且我有一系列汽车激情。我正在检查它们何时与屏幕上的其他对象发生碰撞,以及它们何时碰撞,数组的单独索引应该会改变速度。然而,每辆车在屏幕上的速度也都在变化。碰撞时阵列中每个物体的速度变化

任何帮助,将不胜感激。请附上代码如下:

this.registerUpdateHandler(new IUpdateHandler() { 
     @Override 
     public void onUpdate(final float pSecondsElapsed) { 
      for (int i = 0; i < rManager.getInstance().carArray.length; i++) 
      { 
       if(rManager.getInstance().carArray[i].getCarSprite().collidesWith(rManager.getInstance().iceArray[i].getIceSprite())) { 
        Log.e("test", "ice collision"); 
        rManager.getInstance().carArray[i].setCarSpeed(3f); 
       } else { 
        rManager.getInstance().carArray[i].setCarSpeed(0.5f); 
       } 
      } 
     } 

     @Override 
     public void reset() { 
      // TODO Auto-generated method stub 

     } 
    }); 

更新的代码:

for (int i = 0; i < rManager.getInstance().carArray.length; i++) 
       { 
        for (int j = 0; j < rManager.getInstance().iceArray.length; j++) 
        { 
         if(rManager.getInstance().carArray[i].getCarSprite().collidesWith(rManager.getInstance().iceArray[j].getIceSprite())) { 
          Log.e("log", "CAR COLLIDED WITH ICE LOL"); 
          rManager.getInstance().carArray[i].setCarSpeed(3f); 
         } else { 
          rManager.getInstance().carArray[i].setCarSpeed(1f); 
         } 
        } 
       } 

更新的代码2:

@Override 
protected void onManagedUpdate(float pSecondsElapsed) { 

      for (int i = 0; i < rManager.getInstance().carArray.length; i++) 
      {      
       for (int j = 0; j < rManager.getInstance().iceArray.length; j++) 
       { 
        if(this.getX() < (rManager.camera.getWidth() + this.getWidth())){ 
         this.setPosition(this.getX() + (rManager.getInstance().carArray[i].getSpeed() + speedMod), this.getY()); 
        } else { 
         this.setPosition(0 - this.getWidth(), this.getY()); 
        } 

        if (rManager.getInstance().iceArray[j].getIceSprite().collidesWith(rManager.getInstance().carArray[i].getCarSprite())) 
        { 
         Log.e("log", "car collided with ice"); 
         this.setPosition(this.getX() + (rManager.getInstance().carArray[i].getSpeed() + 2f), this.getY()); 
        } 
       } 
      }    


      super.onManagedUpdate(pSecondsElapsed); 
    } 
+0

请你张贴setCarSpeed()函数和车速变量的声明?我怀疑变量可能是静态的。 –

回答

0

首先,通知您访问到(IceSprites)的阵列使用汽车的指数。如果你有不同数量的这些元素,你可以有例外。

您的代码只检查每辆车是否与一个冰雪撬元素发生碰撞。这是你想要的吗?

rManager.getInstance()。 carArray [I] .getCarSprite()。collidesWith(rManager.getInstance()。iceArray [I] .getIceSprite())

也许你要检查,如果你的车在出现的任何冰元素碰撞你的世界。没有? 在这种情况下,您将需要另一个冰元素循环。

我希望这有助于
问候

+0

嗨佩德罗,感谢您的快速回复。 我有一堆汽车和一堆冰精灵,我想检查它们之间是否有任何类型的碰撞:) –

+0

我有更好的碰撞,但同样的问题仍然存在。每当发生碰撞时,所有车都受到影响! :( –

+0

然后在每次更新中,您需要查看* collidable *元素并针对所有* collideable *元素进行测试,并对所有元素进行测试。注意,您可以避免对已经测试过的元素进行一些测试它之前在相同的更新 –