碰撞时阵列中每个物体的速度发生变化

时间:2013-04-15 03:27:02

标签: android andengine

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

1 个答案:

答案 0 :(得分:0)

首先,请注意您使用汽车索引访问(IceSprites)数组。如果您有不同数量的这些元素,则可以有例外。

您的代码仅检查每辆车是否与一个冰精灵元素碰撞。这是你想要的吗?

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

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

我希望这有帮助,
最诚挚的问候