![]() |
|
||||||||||
|
|||||
|
[+1.4 18.06.07]
Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
|
Допустим, есть кнопка, улавливающая событие MOUSE_OVER, при наступлении которого, выполняется ряд операций.
С учетом того, что событие срабатывает часто и переменных довольно много(10-15): Правильно-ли каждый раз объявлять переменные в функции, вызываемой событием? public function testfunc(){
addChild(someObj);
someObj.addEventListener(MouseEvent.MOUSE_OVER, mousefunc);
function mousefunc(event:MouseEvent):void{
var a..
var b..
var c..
var d..
..
..
}
}
__________________
А я Томат. |
|
|||||
|
По-моему есть более важные проблемы в оптимизации....
Например генерация и рассылка самого события ест времени больше на несколько порядков. |
|
|||||
|
[+1.4 18.06.07]
Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
|
Млин, тогда я вообще не понимаю в чем проблема:
Есть xml-меню. При срабатывании мышиного события на кнопках, начинается множественный tween(различные элементы кнопки двигаются/поворачиваются/становятся прозрачными и т.п.). Проблема в том, что когда быстро передвигаю мышь с кнопки на кнопку в течении 10-15 секунд, tween, сработавший в какой-либо из кнопок, может запросто застрять где-то на середине.. Схематично, код выглядит следующим образом: 1.Создаю массив элементов меню: var menuItem[i]:Array; 2.Создаю массив спрайтов/текстфилдов, из которых состоит данный элемент меню(фон кнопки, кружочки, звездочки, текстовые элементы и т.п.): var menuItem[i].elem=[]; 3.Создаю спрайт-перехватчик мышиных событий: var menuItem[i].lst=new Sprite() 4.При возникновении мышиного события перехожу к функции, видоизменяющей кнопку соответственным образом: menuItem[i].lst.addEventListener(MouseEvent.MOUSE_OVER, tweenItem); menuItem[i].lst.addEventListener(MouseEvent.MOUSE_OUT, tweenItem); menuItem[i].lst.addEventListener(MouseEvent.MOUSE_DOWN, tweenItem); 5.При срабатывании функции, определяю тип события, и перебираю все составные элементы данного элемента меню. for (var j:uint j<menuItem[i].elem.length()) 6.У каждого из составных элементов перебираю, описанные в XML, параметры. Если значение параметра указано для данного мышиного события, запускаю tween. myTween = new Tween(menuItem[i].elem[j], param, None.easeNone, this_elem_current_param_value, this_elem_new_param_value, 0.5, true); 6а.Пробовал создать массив Tween-ов - не спасает. myTween[kkk] = new Tween(menuItem[i].elem[j], param, None.easeNone, startValue, finishValue, 0.5, true); kkk++; ------ Модераторам: Переименуйте пожалуйста тему в "Некорректное срабатывание Tween"
__________________
А я Томат. Последний раз редактировалось Torero; 23.09.2007 в 07:14. |
|
|||||
|
ветеран форума
|
Да, с залипанием твина проблема есть. Делал приложение где до 40 твинов одновременно выполняется какждые 5 секунд. Вероятность залипания гдето 1% была. Пришлось делать принудительный fforward всем твинам через небольшой промежуток после расчетного времени окончания.(твины были движение и смена прозрачности)
__________________
4am is time to rock |
|
|||||
|
[+1.4 18.06.07]
Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
|
Спасибо за ответы.
Час просиживания в гугле, привел меня к следующему оттвету на одном из буржуйских форумов: I had this very same problem and it drove me crazy for a few days, I found this on adobe's site: Note: Consider variable scope when using the Tween class. If a tween is created in a function, it is important that the variable's scope exists beyond the function itself. If a tween is stored to a variable of local scope, ActionScript garbage collection removes the tween as the function completes, which will likely be before the tween has even begun. I made my tween variables class members and everything started working correctly. ------------------------ объясните пжл: Что они имеют в виду?
__________________
А я Томат. Последний раз редактировалось Torero; 23.09.2007 в 17:35. |
|
|||||
|
ветеран форума
|
Дошло....вобщем если создаешь внутри функции твин как локальную переменную, после исполнения функции ссылка исчезает и твин рискует быть собранным сборщиком мусора и перестанет работать соответственно. Ссылки на твины надо хранить в свойствах класса например, чтобы они не терялись. Поэтому и ошибка трудноуловимая.
Спасибо за информацию!
__________________
4am is time to rock |
|
|||||
|
[+1.4 18.06.07]
Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
|
Проблема не в переводе - с инглишем все в норме.. Я не понимаю смысл. Что значит "Ссылки на твины надо хранить в свойствах класса"?
Что не так?
__________________
А я Томат. Последний раз редактировалось Torero; 23.09.2007 в 19:01. |
|
|||||
|
ветеран форума
|
Все так. Если в этой ситуации зависают, проверяй, закончился ли твин у клипа до присвоения ему нового. если нет - сначала принудительно заканчивай предыдущий или делай continueTo...
__________________
4am is time to rock |
|
|||||
|
[+1.4 18.06.07]
Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
|
Цитата:
6а.Пробовал создать массив Tween-ов - не спасает. Бред какой-то.. Может нужно еще и current_object-ы в массиве хранить?
__________________
А я Томат. Последний раз редактировалось Torero; 23.09.2007 в 18:26. |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:20. |
|
|
« Предыдущая тема | Следующая тема » |
|
|