Прошлой ночью я создал небольшой проект для развлечения, который включает в себя создание множества маленьких кругов (звезда).Чтобы представить эту звезду, я создал звездный класс.Здесь приведены наиболее подходящие методы
public class Star extends MovieClip
{
public function Star(r:Number)
{
starRadius = r;
this.animated = false;
this.graphics.beginFill(0xFFFFFF);
this.graphics.drawCircle(0,0,starRadius);
this.graphics.endFill();
this.addEventListener(Event.REMOVED, onRemoval);
}
public function animate():void
{
if( isNull(angle)|| isNull(speed)){
throw new Error("Angle or speed is NaN. Failed to animate");
}
if(animated){
throw new Error("Star already animated");
}
if(this.parent == null){
throw new Error("Star has not been added to stage yet");
}
this.addEventListener(Event.ENTER_FRAME, doAnimate, false, 0);
animated = true;
}
private function doAnimate(e:Event):void{
if(isNull(cachedDirectionalSpeedX) || isNull(cachedDirectionalSpeedY)){
cachedDirectionalSpeedY = -speed * Math.sin(angle);
cachedDirectionalSpeedX = speed * Math.cos(angle);
}
this.x += cachedDirectionalSpeedX;
this.y += cachedDirectionalSpeedY;
if(this.x > this.parent.stage.stageWidth || this.y > this.parent.stage.stageHeight){
this.dispatchEvent(new Event("RemoveStar",true));
this.removeEventListener(Event.ENTER_FRAME, doAnimate);
}
}
Чтобы дать вам краткую информацию о том, что он делает, в основном при инициализации он добавляет к себе прослушиватель, который в основном просто обнуляет все переменные экземпляра.Когда вызывается animate (), он добавляет слушателя к себе, который оживляет в определенном направлении.Этот слушатель также проверяет, находится ли его местоположение за пределами сцены, и останавливает его движение, когда оно уже есть.Кроме того, он отправит событие, чтобы родитель знал, когда его удалить.
Итак, в "основном" классе у меня есть
this.addEventListener("RemoveStar", removeStar);
и
private function removeStar(e:Event):void
{
starCount--;
this.removeChild(Star(e.target));
}
У меня есть другой слушатель, который в основном печатает число дочерних элементов, которое у него есть каждый раз, но я не собираюсь помещать код здесь.У меня проблема в том, что ... похоже, что слушатель, удаляющий звезду, не работает "все время".При создании 1000 звезд во время запуска и больше ничего количество детей уменьшается в самом начале, и оно застревает на определенном количестве, что наводит меня на мысль, что некоторые фрагменты ролика не удаляются.Кто-нибудь знает, что здесь происходит?