Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.11.2014, 05:27
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 1  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
По умолчанию Периодическая ошибка из за нулевой ссылки на объект

Доброго времени суток
Периодически вываливается ошибка
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);
	}
}


Последний раз редактировалось neonoviiwolf; 02.11.2014 в 05:46.
Старый 02.11.2014, 09:41
alexandrratush вне форума Посмотреть профиль Отправить личное сообщение для alexandrratush Найти все сообщения от alexandrratush
  № 2  
Ответить с цитированием
alexandrratush
 
Аватар для alexandrratush

Регистрация: Jul 2013
Адрес: Днепр
Сообщений: 529
Отправить сообщение для alexandrratush с помощью ICQ Отправить сообщение для alexandrratush с помощью Skype™
Проверяйте не равен ли вызываемый объект null.

Старый 02.11.2014, 14:24
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 3  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
alexandrratush, спасибо, помогло, а тоя уже через break, что б хоть как то работала
ошибка похоже была в передачи данных функции
Код AS3:
fn_expl(boll_st.x, boll_st.y);
Добавлено через 8 минут
+ещё вопрос, не совсем понятно, вот код
Код AS3:
while (условие){
      while (условие){
            break;
      }
}
break - прервёт оба цикла или только вложенный?

Старый 02.11.2014, 15:00
VisualDima вне форума Посмотреть профиль Отправить личное сообщение для VisualDima Найти все сообщения от VisualDima
  № 4  
Ответить с цитированием
VisualDima
 
Аватар для VisualDima

Регистрация: May 2009
Сообщений: 26
Цитата:
Сообщение от neonoviiwolf Посмотреть сообщение
alexandrratush
+ещё вопрос, не совсем понятно, вот код
Код AS3:
while (условие){
      while (условие){
            break;
      }
}
break - прервёт оба цикла или только вложенный?
только вложенный.


Последний раз редактировалось VisualDima; 02.11.2014 в 15:02. Причина: ошибка форматирования
Старый 02.11.2014, 17:06
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 5  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
спасибо

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:49.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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