Скоростта на всеки обект в масива се променя при сблъсък

Разработвам игра в 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())< /em>

Може би искате да проверите дали колата ви се сблъсква с някой леден елемент, представен във вашия свят. Не? В такъв случай ще ви е необходима друга примка за ледените елементи.

Надявам се това да помогне,
С най-добри пожелания

person Pedro Gandola    schedule 15.04.2013
comment
здравей pedro, благодаря за бързия отговор. имам куп коли и куп ледени спрайтове и искам да проверя дали има някакъв вид сблъсък между някой от тях :) - person opposite of you; 15.04.2013
comment
имам по-добър сблъсък, но същият проблем продължава. когато има сблъсък, всички коли са засегнати! :( - person opposite of you; 15.04.2013
comment
След това при всяка актуализация трябва да надникнете в коллизируем елемент и да го тествате срещу всички коллизируеми елементи във вашия свят. И направете това за всички елементи. Забележете, че можете да избегнете някои тестове на елементи, които вече сте тествали преди в същата актуализация. - person Pedro Gandola; 15.04.2013
comment
здравей pedro, мисля, че разбирам, но все още имам някои проблеми. Добавих актуализирания код, тестващ всички елементи към първия пост. за съжаление, не само все още получавам същия проблем с всички обекти в масива от коли, които се променят, ако има 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