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

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

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

Регистрация: Jun 2014
Сообщений: 558
в общем застрял, не могу обнулить ссылку на внутренний класс

Код AS3:
internal class DefoltDoing extends Sprite
{
	protected var space:Space;
	protected var hero:CatBody;
	protected var vectorBallonMouse:Vector.<Object>;
 
	public function DefoltDoing()
	{
		space = SpaceSingleton.getSpaceSingleton.getSpace;
		hero = CatSingleton.getCatSingleton.getCat;
		vectorBallonMouse = MouseBalloonSingleton.getMouseBalloonSingleton.getVectorMouse;
 
		hero.getBody.cbTypes.add(heroCollisionType);
		for (var i:int = 0; vectorBallonMouse.length > i; ++i)
		{
			vectorBallonMouse[i].getBody.cbTypes.add(balloonMouseCollision);
		}
		space.listeners.add(new PreListener(InteractionType.COLLISION, heroCollisionType, balloonMouseCollision, preListenerHeroAndMouse));
	}
 
	protected var interactionListener:InteractionListener;
	protected var heroCollisionType:CbType = new CbType();
	protected var balloonMouseCollision:CbType = new CbType();
 
	public function preListenerHeroAndMouse(cb:PreCallback):PreFlag
	{
		trace(1);
		return PreFlag.IGNORE_ONCE;
	}
}
 
internal class DefoltDoing2 extends DefoltDoing
{
	public function DefoltDoing2()
	{
 
	}
 
	override public function preListenerHeroAndMouse(cb:PreCallback):PreFlag
	{
		trace(2);
		return PreFlag.IGNORE_ONCE;
	}
}
 
internal class DefoltDoing3 extends DefoltDoing
{
	public function DefoltDoing3()
	{
 
	}
 
	override public function preListenerHeroAndMouse(cb:PreCallback):PreFlag
	{
		trace(3);
		return PreFlag.IGNORE_ONCE;
	}
}
первый внутренний и остальные два, которые от него наследуются
В основном классе пишу
Код AS3:
		private var defoltDoing2:DefoltDoing2;
		private var defoltDoing3:DefoltDoing3;
		private var sprite:Sprite;
 
		private function startFlag1(e:UserEvent):void
		{
			sprite  = new DefoltDoing2();
			sprite = null;
			sprite = new DefoltDoing3();
		}
тут я проверяю, работает ли override
в итоге, после всего,теперь у меня срабатывают методы и из DefoltDoing2 и из DefoltDoing3, а если создать экземпляр DefoltDoing, то и его метод. А мне нужно, чтобы срабатывал только один. Что я не так написал?

Добавлено через 3 часа 54 минуты
Общий итог извращений привел к варианту
Код AS3:
internal class DefoltDoing extends Sprite
{
	protected var space:Space;
	protected var hero:CatBody;
	protected var vectorBallonMouse:Vector.<Object>;
 
	public function DefoltDoing()
	{
		space = SpaceSingleton.getSpaceSingleton.getSpace;
		hero = CatSingleton.getCatSingleton.getCat;
		vectorBallonMouse = MouseBalloonSingleton.getMouseBalloonSingleton.getVectorMouse;
 
		hero.getBody.cbTypes.add(heroCollisionType);
		for (var i:int = 0; vectorBallonMouse.length > i; ++i)
		{
			vectorBallonMouse[i].getBody.cbTypes.add(balloonMouseCollision);
		}
		_preListener = new PreListener(InteractionType.COLLISION, heroCollisionType, balloonMouseCollision, preListenerHeroAndMouse);
 
		this.addEventListener(Event.ADDED_TO_STAGE, init);
	}
 
	private function init(e:Event):void
	{
		removeEventListener(Event.ADDED_TO_STAGE, init);
		this.addEventListener(Event.REMOVED_FROM_STAGE, removeInit);
 
		space.listeners.add(_preListener);
	}
 
	private function removeInit(e:Event):void
	{
		removeEventListener(Event.REMOVED_FROM_STAGE, removeInit);
		this.addEventListener(Event.ADDED_TO_STAGE, init);
 
		space.listeners.remove(_preListener);
	}
	protected var _preListener:PreListener;
	protected var interactionListener:InteractionListener;
	protected var heroCollisionType:CbType = new CbType();
	protected var balloonMouseCollision:CbType = new CbType();
 
	public function preListenerHeroAndMouse(cb:PreCallback):PreFlag
	{
		return PreFlag.IGNORE_ONCE;
	}
}
 
internal class DefoltDoing2 extends DefoltDoing
{
	public function DefoltDoing2()
	{
	}
 
	override public function preListenerHeroAndMouse(cb:PreCallback):PreFlag
	{
		return PreFlag.IGNORE_ONCE;
	}
}
 
internal class DefoltDoing3 extends DefoltDoing
{
	public function DefoltDoing3()
	{
	}
 
	override public function preListenerHeroAndMouse(cb:PreCallback):PreFlag
	{
		return PreFlag.IGNORE_ONCE;
	}
}
теперь если делать так
Код AS3:
		private var defoltDoing2:DefoltDoing;
		private var defoltDoing3:DefoltDoing;
		private var sprite1:Sprite;
		private var sprite2:Sprite;
 
		private function startFlag1(e:UserEvent):void
		{
			sprite1 = new DefoltDoing2();
			addChild(sprite1);
			sprite2 = new DefoltDoing3();
			addChild(sprite2);
		}
то при удалении с экрана, перестаёт работать соответствующий класс

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

Регистрация: Apr 2009
Сообщений: 409
Выше писал про состояния, которые как раз для таких случаев. не получится вписать все игровые условия в классические паттерны - это бесконечный рефакторинг)

Старый 23.02.2016, 23:31
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 13  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
В итоге, встретив множество неудобных углов, связанные с перезаписью слушателя Nape в момент space.step(), переписал под вариант предложенный caseyryan, после того, как пришло осознание как применить его к своей проблеме

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

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

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


 


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


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