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

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

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

Регистрация: Jan 2011
Сообщений: 247
Attention Удаление спрайта

Вроде всегда нормально удалялись спрайты, но не сейчас
вот код :
Код AS3:
private function eFrameEvents(e:Event):void {
				if(loaded2){
					loaded2 = false;
					var newBullet = new Sprite();
					newBullet.graphics.beginFill(0xFFFFFF);
					newBullet.graphics.drawCircle(0,0,2);
					newBullet.graphics.endFill();
					newBullet.x = turret.x;
					newBullet.y = turret.y;
					newBullet.addEventListener(Event.ENTER_FRAME,eFrame);
					addChild(newBullet);
				}
			}
private function eFrame(e:Event):void {
			var newBullet2:Sprite = Sprite(e.target);
			if(newBullet2.hitTestObject(enTarget)){
				enTarget.health -= damage;				
				removeEventListener(Event.ENTER_FRAME, eFrame);
				newBullet2.parent.removeChild(newBullet2);//<-- тут ошибка
			}
}
OutPut:Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
Подскажите в чем может быть проблема? где-то не досмотрел?

Старый 23.08.2011, 23:04
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 2  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Код AS3:
if(newBullet2.parent)
   newBullet2.parent.removeChild(newBullet2);
Объект уже не имеет родителя

Добавлено через 1 минуту
а причина вот

Код AS3:
newBullet2.removeEventListener(Event.ENTER_FRAME, eFrame);
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 23.08.2011, 23:38
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 3  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от GBee Посмотреть сообщение
Код AS3:
if(newBullet2.parent)
   newBullet2.parent.removeChild(newBullet2);
Объект уже не имеет родителя

Добавлено через 1 минуту
а причина вот

Код AS3:
newBullet2.removeEventListener(Event.ENTER_FRAME, eFrame);
Спасибо помогло

Чтобы не создавать токую же тему отпишу здесь сразу второй вопрос)

вот код :
Код AS3:
private function eFrameEvents(e:Event):void {
			var turret:Sprite = Sprite(e.target);
			enTarget = null;
			for(var i:int=enemyHolder.numChildren-1;i>=0;i--){
				var cEnemy =enemyHolder.getChildAt(i);
				if (Math.sqrt(Math.pow(cEnemy.y - turret.y, 2) + Math.pow(cEnemy.x - turret.x, 2)) < 100) {
					enTarget = cEnemy; 
				}
			}
			if(enTarget != null){
				turret.rotation = Math.atan2((enTarget.y-turret.y), enTarget.x-turret.x)/Math.PI*180 - 90;
				if(loaded2){
					loaded2 = false;
					var newBullet = new Sprite();
					newBullet.graphics.beginFill(0xFFFFFF);
					newBullet.graphics.drawCircle(0,0,2);
					newBullet.graphics.endFill();
					newBullet.x = turret.x;
					newBullet.y = turret.y;
					newBullet.addEventListener(Event.ENTER_FRAME,eFrame);
					addChild(newBullet);
                                             }
                                  }
}
private function eFrame(e:Event):void {
			var newBullet2:Sprite = Sprite(e.target);
			var yDist:Number=enTarget.y+12.5 - newBullet2.y;//<-- тут ошибка на "enTarget"
			var xDist:Number=enTarget.x+12.5 - newBullet2.x;
			var angle:Number=Math.atan2(yDist,xDist);
			ySpeedBul=Math.sin(angle) * maxSpeedBul;
			xSpeedBul=Math.cos(angle) * maxSpeedBul;
			newBullet2.x+= xSpeedBul;
			newBullet2.y+= ySpeedBul;
			if(newBullet2.hitTestObject(enTarget)){
				enTarget.health -= damage;
				if(newBullet2.parent){
				newBullet2.parent.removeChild(newBullet2); }
				removeEventListener(Event.ENTER_FRAME, eFrame);
			}
		}
 
//Output:Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
Суть проблемы в том что если цель башни выходит с радиуса или умерает(удаляется со сцены), получается такая ошибка...

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
вы не отписываетесь от события
вместо
Код AS3:
removeEventListener(Event.ENTER_FRAME, eFrame);
надо
Код AS3:
newBullet2.removeEventListener(Event.ENTER_FRAME, eFrame);
Я же писал.

а почему нет enTarget я не знаю, проверяйте что он существует или логику чините.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

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

Регистрация: Jan 2011
Сообщений: 247
Спасибо, еще рас GBee.
также нашел выход и со второй ситуации.

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

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

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


 


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


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