в общем застрял, не могу обнулить ссылку на внутренний класс
Код 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);
}
то при удалении с экрана, перестаёт работать соответствующий класс