убивает старые объекты во вспышке? - PullRequest
1 голос
/ 17 марта 2009

Привет, здесь первый таймер.

Я создаю флэш-анимацию с использованием библиотеки tweenlite. Это очень просто, поэтому это так обостряет. Это в основном слайд-шоу с 5 кадрами, которые постепенно исчезают. Когда кнопка, вызывающая следующий кадр, исчезает, я хотел бы отключить все действия, которые она над ним выполняет. В настоящее время он исчезает, но при наведении на него появляется курсор кнопки, а завышение возвращает непрозрачность обратно.

Я действительно новичок во флеше, поэтому я уверен, что это очень просто.

спасибо, Райан

Ответы [ 3 ]

1 голос
/ 17 марта 2009

Как бы то ни было, в AS нет прямого способа удаления объектов, даже если у вас есть оператор new для его создания. Все объекты собираются для мусора, когда нет сильных ссылок на этот объект. Вот две вещи, которые вы можете сделать:

  • При добавлении обработчиков событий в объект кнопки или что-либо еще пометьте их как слабые ИЛИ установите обработчики событий в NULL, когда вы проходите через

  • Хотя в AS нет явного удаления, вы можете установить для объекта значение null, используя синтаксис var = null, чтобы сборщик мусора пометил его как read y для очистки.

0 голосов
/ 31 марта 2009

Большинство слайд-шоу, которые я вижу, перезапускаются или будут зацикливаться самостоятельно. Я не верю, что вы хотите удалить функциональность, а просто удалить элемент управления на определенное время. После MOUSE_DOWN или CLICK вы можете легко отключить кнопку с помощью

var slidesContainer:Sprite = new Sprite();

var slideButton:Sprite = new Sprite();
slideButton.graphics.beginFill(0x000000);
slideButton.drawRect(0,0,100,30);
slideButton.endFill();
addChild(slidebutton);

slideButton.addEventListener(MouseEvent.MOUSE_DOWN, onButtonDown);

var slide01:MovieClip = new Slide();
slidesContainer.addChild(slide01);
var slide02:MovieClip = new Slide();
slidesContainer.addChild(slide02);

//Store references to the newly created movieclips in an array.
var arrayOfSlides:Array = [slide01, slide02];
var currentSlide:int = 0;

function onBtnDown(e:MouseEvent):void
{
     TweenLite.to(arrayOfSlides[currentSlide], 1, {alpha: 0});
     e.target.mouseEnabled = false;  //The button that was pressed down is the target

     currentSlide++;
}

Таким образом, мы просто делаем объект невидимым и отключаем его функции мыши.

Отличная идея готовить объекты для сборки мусора, когда они не нужны, но важно знать, что вы хотите делать со своей работой. Если вы хотите больше никогда не использовать объект, удалите все ссылки, установив значение null. Если вы экспортируете во флэш-плеер 10, есть метод unloadAndStop, который очень помогает полностью удалить элементы и подготовить для GC.

Если вы планируете многократно использовать вещи, например, при повторном запуске слайд-шоу через некоторое время и т. Д., Вы просто установите свойства видимости и mouseEnabled кнопок обратно в значение true.

0 голосов
/ 24 марта 2009

Если вы действительно используете AS2 (?) - насколько я помню - вы должны использовать экземпляр MovieClip вместо Button. Кнопки всегда будут держать курсор в виде руки, в то время как мувиклипы могут менять поведение в зависимости от того, подключены какие-либо обработчики мыши или нет.

Всякий раз, когда вы хотите деактивировать действия мыши, вы должны просто удалить обработчик (и), который вы ранее определили (например, myButton.onRelease = null; myButton.onMouseOver = null; ...).

Если вы на самом деле используете AS3 , вы должны сначала удалить все связанные прослушиватели событий (например, myButton.removeEventListener(MouseEvent.CLICK, clickHandler);)

Затем установите для buttonMode значение false, чтобы избежать появления курсора, хотя «функция щелчка» была удалена (myButton.buttonMode = false;).

Надеюсь, это имеет смысл.

...