убийство старых объектов во флеше?

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

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

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

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


person Community    schedule 17.03.2009    source источник
comment
не уверен, что понимаю, что вы имеете в виду.   -  person    schedule 18.03.2009
comment
это actionctipt2, не так ли? кнопка создана с помощью attachMovie или вы поместили ее на временную шкалу вручную?   -  person Theo.T    schedule 19.03.2009


Ответы (3)


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

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

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

person dirkgently    schedule 17.03.2009

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

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

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

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

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

person Theo.T    schedule 24.03.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, который очень помогает полностью удалить элементы и подготовиться к сборке мусора.

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

person Brian Hodge    schedule 30.03.2009