Скорость каждого объекта в массиве изменяется при столкновении

Я разрабатываю игру в 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);
    }

person opposite of you    schedule 15.04.2013    source источник
comment
Не могли бы вы опубликовать функцию setCarSpeed() и объявление переменной скорости автомобиля? У меня есть подозрение, что переменная может быть статической.   -  person Plastic Sturgeon    schedule 16.04.2013


Ответы (1)


Во-первых, обратите внимание, что вы обращаетесь к массиву (IceSprites), используя индекс автомобилей. Если у вас другое количество этих элементов, у вас могут быть исключения.

Ваш код только проверяет, сталкивается ли каждая машина с одним элементом ледяного спрайта. Это то, что вы хотите?

rManager.getInstance().carArray[i].getCarSprite().collidesWith(rManager.getInstance().iceArray[i].getIceSprite())< /эм>

Может быть, вы хотите проверить, не сталкивается ли ваша машина с каким-либо ледяным элементом, представленным в вашем мире. Нет? В этом случае вам понадобится еще одна петля для ледяных элементов.

Я надеюсь, что это поможет,
С наилучшими пожеланиями

person Pedro Gandola    schedule 15.04.2013
comment
привет педро, спасибо за быстрый ответ. у меня есть куча машин и куча ледяных спрайтов, и я хочу проверить, когда между ними происходит какое-либо столкновение :) - person opposite of you; 15.04.2013
comment
У меня лучше коллизия, но та же проблема все еще сохраняется. всякий раз, когда происходит столкновение, затрагиваются все автомобили! :( - person opposite of you; 15.04.2013
comment
Затем при каждом обновлении вам нужно просмотреть элемент collidable и протестировать его против всех collidable элементов в вашем мире. И сделать это для всех элементов. Обратите внимание, что вы можете избежать некоторых тестов элементов, которые вы уже тестировали ранее в том же обновлении. - person Pedro Gandola; 15.04.2013
comment
привет педро, я думаю, что понимаю, но у меня все еще есть некоторые проблемы. я добавил обновленный код, проверяющий все элементы, в первый пост. к сожалению, у меня не только все та же проблема со всеми объектами в массиве автомобилей, изменяющимися при 1 столкновении, но и некоторые столкновения со льдом не работают. в логе видно, что они регистрируются, но скорость автомобиля не меняется. Я тестирую все возможные элементы, поэтому в этом нет особого смысла. Спасибо!! - person opposite of you; 15.04.2013
comment
Обратите внимание, что вы тестируете каждую машину со всеми ледяными элементами в мире. Если ваша машина имеет скорость 2f и столкнется с первым ледяным элементом, то скорость будет 3f. Верно? Но когда вы попытаетесь проверить его вторым ледяным элементом, ваша машина не столкнется с ним, тогда скорость будет 1f. - person Pedro Gandola; 15.04.2013
comment
о да. это решающая ошибка. теперь скорости выставляются правильно. каждая машина теперь правильно сталкивается с другими элементами. Единственное, что мне нужно исправить сейчас, это остановить ускорение всех машин в массиве. даже если 1 машина столкнется с элементом в массиве льда, все автомобили в массиве автомобилей также ускорятся. окончательный код добавлен к исходному q. с уважением и большое спасибо за поддержку - person opposite of you; 15.04.2013