Просмотр полной версии : Параметр в addFrameScript
Psycho Tiger
13.11.2009, 20:04
Хочу остановить и убрать видимость.
Такой вариант не нравится.
mc.addFrameScript(0, function(mc:MovieClip):Function { return function():void { mc.stop(); mc.visible = false }}(mc) );
Ещё есть что?
Felicast
13.11.2009, 20:33
mc.addEventListener(Event.ENTER_FRAME, enterFrameListener);
function enterFrameListener(event:Event):void
{
var mc:MovieClip = event.target as MovieClip;
if (mc && (mc.currentFrame == 0))
{
mc.stop();
mc.visible = false;
}
}
А какой вариант лучше? И чем?
Мне думается, что лучше всё-же второй вариант. Привычнее как-то)
Единственно что, условие (mc.currentFrame == 0) нужно заменить на (mc.currentFrame == 1), т.к. отсчёт кадров начинается с 1, а не с 0. И ещё в конце обработчика можно написать mc.removeEventListener(Event.ENTER_FRAME, enterFrameListener), чтобы он зря не отрабатывал каждый кадр. При условии, конечно, что скрыть нужно единожды.
Felicast
14.11.2009, 11:37
первый тоже имеет право на жизнь, но я бы вынес функцию отдельно.
Единственно что, условие (mc.currentFrame == 0) нужно заменить на (mc.currentFrame == 1), т.к. отсчёт кадров начинается с 1, а не с 0.
ага. я просто очень редко использую MovieClip, поэтому не помню таких тонкостей
Psycho Tiger
14.11.2009, 19:11
Вы издиваетесь?)
Я же имею ввиду не вообще "как это можно сделать", а вменяемые варианты :)
TanaTiX - мой вариант лучше, быстрее и правильнее. Когда нужно нажать на какую нибудь кнопку мышкой (у которого mouseEnabled=true) - мы ведь подписываем объект на MouseEvent.CLICK, а не stage, где в последствии через getObjectsUnderPoint определяем список того, что под нами и циклом сравниваем элемент с собой?
SamFR, привычно то привычно, но ведь мы наследуемся от шейпа, от спрайта, от эвент диспатчера наконец. Можно ведь сразу от мувиклипа, тоже привычней)
Felicast, за помощь спасибо, но я бы сказал, твой вариант права на жизнь не имеет)
Ну не знаю, не знаю... Во-первых, от MovieClip-а я наследовать никого не призываю :) А насчёт правильнее... не уверен. Просто, наверное, не очень доверяю недокументированным возможностям, и использую их только при крайней необходимости. Мало ли, что адобовцы к следующей версии плеера придумают :)
Насчёт скорости – да, наверное, addFrameScript() побыстрее будет, но так ли уж в данном случае важна разница в пару миллисекунд?
Добавлено через 5 минут
Кстати, больше вариантов, как вменяемых, так и невменяемых, в голову что-то не приходит...
Felicast
14.11.2009, 21:25
Я же имею ввиду не вообще "как это можно сделать", а вменяемые варианты
вы спросили
Ещё есть что?
вам ответили.
Felicast, за помощь спасибо, но я бы сказал, твой вариант права на жизнь не имеет)
аргументируйте пожалуйста
Psycho Tiger
14.11.2009, 23:07
Зачем вешать обработчик, который будет вызываться каждый кадр, который возможно будет вызывать неудобства (добавить/удалить листенер при уничтожении объекта), если можно добавить код к кадру?
Ну не обязательно он должен отрабатывать каждый кадр. Если больше не планируется возвращение к первому кадру, либо больше не нужно в этом кадре мувик скрывать, то в теле обработчика можно сразу же отписаться от энтерфрейма. Тогда он сработает только один раз.
Я не говорю, что навешивание обработчика – самый красивый и правильный метод, просто больше документированных возможностей отловить наступление кадра я не знаю. А к недокументированным своё отношение я уже высказал выше.
P.S. Кстати, мы ведь не знаем, как работает addFrameScript()... Вполне может оказаться так, что он делает то же самое :) Ведь MovieClip, всё-таки, является наследником спрайта, и было бы логичным реализовать мувиклиповские методы, основываясь на базовой функциональности.
addFrameScript() добавляет скрипт конкретному экземпляру или самому классу?
Psycho Tiger
03.04.2010, 21:38
К экземпляру конечно.
а так разве на работает?
mc.addFrameScript(0, function():void { mc.stop(); mc.visible = false });
другой вариант:
прописать в классе для mc метод
function frame1(){ stop(); visible = false };
если тебе нужно параметры передавать тогда:
http://gorbatov.blogspot.com/2007/09/addframescript.html
Psycho Tiger
05.04.2010, 15:21
а так разве на работает?
Писал же, что работает - но мне такой подход не нравится.
А подход что ты дал - да, хороший. Наверное, там утечек уже быть не должно - сейчас без нужды тестить.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.