Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Периодическая ошибка из за нулевой ссылки на объект (http://www.flasher.ru/forum/showthread.php?t=209353)

neonoviiwolf 02.11.2014 05:27

Периодическая ошибка из за нулевой ссылки на объект
 
Доброго времени суток
Периодически вываливается ошибка
TypeError: Error #1009: Cannot access a property or method of a null object reference.
О причине я догадываюсь, нов голову не приходит решение.
Думаю проблема в том, что я запуская два цикла while, и когда хиттест вызывает функция "fn_enemy_1_damage" и там выполняется условие, необходимые для удаления объекта, то в цикле происходит сбой, т.к. он вызывает удалённый объект. В голову так и не приходит, как исправить ошибку
Код AS3:

function fn_hittest(): void {
        var i: Number = enemy_1_Array.length;
        while (i--) {
                var j: Number = FireArray.length;
                while (j--) {
                        var enemy_1: enemy_1_mc = enemy_1_Array[i];
                        var boll_st: boll_mc = FireArray[j];
                        if (enemy_1.hitTestObject(boll_st)) {
                                fn_expl(boll_st.x, boll_st.y);
                                if (boll_st.tip == 1) {
                                        fn_point(500);
                                        fn_enemy_1_damage(i, 15);
                                }
                                if (boll_st.tip == 2) {
                                        fn_point(100);
                                        fn_enemy_1_damage(i, 10);
                                }
                                removeChild(boll_st);
                                FireArray.splice(j, 1);
                        }
                }
        }
}
 
//жизни врагов enemy_1_Array: Array = new Array();
function fn_enemy_1_damage(i: Number, damage: Number): void {
        var enemy_1: enemy_1_mc = enemy_1_Array[i];
        enemy_1.life = enemy_1.life - damage;
        if (enemy_1.life <= 0) {
                removeChild(enemy_1_Array[i]);
                removeChild(vihlop_l_enemy_1_Array[i]);
                removeChild(vihlop_r_enemy_1_Array[i]);
                enemy_1_Array.splice(i, 1);
                vih_l_enemy_1_Array.splice(i, 1);
                vih_r_enemy_1_Array.splice(i, 1);
        }
}


alexandrratush 02.11.2014 09:41

Проверяйте не равен ли вызываемый объект null.

neonoviiwolf 02.11.2014 14:24

alexandrratush, спасибо, помогло, а тоя уже через break, что б хоть как то работала
ошибка похоже была в передачи данных функции
Код AS3:

fn_expl(boll_st.x, boll_st.y);

Добавлено через 8 минут
+ещё вопрос, не совсем понятно, вот код
Код AS3:

while (условие){
      while (условие){
            break;
      }
}

break - прервёт оба цикла или только вложенный?

VisualDima 02.11.2014 15:00

Цитата:

Сообщение от neonoviiwolf (Сообщение 1174487)
alexandrratush
+ещё вопрос, не совсем понятно, вот код
Код AS3:

while (условие){
      while (условие){
            break;
      }
}

break - прервёт оба цикла или только вложенный?

только вложенный.

neonoviiwolf 02.11.2014 17:06

спасибо


Часовой пояс GMT +4, время: 07:04.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.