Android 数组中每个对象的速度在碰撞时发生变化

Android 数组中每个对象的速度在碰撞时发生变化,android,andengine,Android,Andengine,我正在安德林开发一款游戏,我有一系列的赛车。我正在检查它们何时与屏幕上的其他对象发生碰撞,当它们发生碰撞时,该数组的单个索引应改变其速度。然而,屏幕上每辆车的速度也在变化 任何帮助都将不胜感激。请查看以下代码: this.registerUpdateHandler(new IUpdateHandler() { @Override public void onUpdate(final float pSecondsElapsed) { for

我正在安德林开发一款游戏,我有一系列的赛车。我正在检查它们何时与屏幕上的其他对象发生碰撞,当它们发生碰撞时,该数组的单个索引应改变其速度。然而,屏幕上每辆车的速度也在变化

任何帮助都将不胜感激。请查看以下代码:

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

        }
    });
this.registerUpdateHandler(新的IUUpdateHandler(){
@凌驾
更新时的公共无效(最终浮点psecondsappeased){
对于(int i=0;i
更新代码:

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);
                        }
                    }
                }
for(int i=0;i
更新代码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);
    }
@覆盖
ManageDupDate上的受保护无效(浮点psecondsAppeased){
对于(int i=0;i
首先,请注意,您正在使用汽车索引访问(IceSprites)数组。如果这些元素的数量不同,则可以有例外

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

rManager.getInstance()。carArray[i].getCarSprite().CollizeSwith(rManager.getInstance()。iceArray[i].getIceSprite())

也许你想检查一下你的车是否与你的世界中出现的任何冰元素相撞。不 在这种情况下,需要为ice元素创建另一个循环

我希望这有帮助,

向佩德罗问好,谢谢你的快速回复。我有一堆汽车和一堆冰精灵,我想检查它们之间是否有任何类型的碰撞:)我有更好的碰撞,但同样的问题仍然存在。一旦发生碰撞,所有车辆都会受到影响!:(然后在每次更新时,您需要查看一个可碰撞元素,并针对您所在世界中的所有可碰撞元素对其进行测试。并对所有元素执行此操作。请注意,您可以避免对之前在同一更新中已测试过的元素进行某些测试。嗨,pedro,我想我理解了,但我仍然存在一些问题。我已添加了更新的代码te将所有元素都钉在第一个帖子上。不幸的是,如果发生1次碰撞,我不仅会遇到同样的问题,车阵列中的所有OBJCT都会发生变化,而且一些与冰的碰撞不起作用。日志显示它们正在被注册,但车速没有变化。我正在测试所有可能的元素,所以它不会发生变化没什么大不了的。谢谢!!注意你正在用世界上所有的冰元素测试每辆车。如果你的车的速度是2f,并且它与第一个冰元素相撞,那么速度将是3f。对吗?但是当你试着用第二个冰元素测试它时,你的车不会与它相撞,那么速度将是1f。你能发布这组吗CarSpeed()函数和car speed变量的声明?我怀疑这个变量可能是静态的。