![]() |
Некорректное срабатывание Tween
Допустим, есть кнопка, улавливающая событие MOUSE_OVER, при наступлении которого, выполняется ряд операций.
С учетом того, что событие срабатывает часто и переменных довольно много(10-15): Правильно-ли каждый раз объявлять переменные в функции, вызываемой событием? Код:
public function testfunc(){Код:
public function testfunc(){ |
По-моему есть более важные проблемы в оптимизации....
Например генерация и рассылка самого события ест времени больше на несколько порядков. |
Млин, тогда я вообще не понимаю в чем проблема:
Есть xml-меню. При срабатывании мышиного события на кнопках, начинается множественный tween(различные элементы кнопки двигаются/поворачиваются/становятся прозрачными и т.п.). Проблема в том, что когда быстро передвигаю мышь с кнопки на кнопку в течении 10-15 секунд, tween, сработавший в какой-либо из кнопок, может запросто застрять где-то на середине.. Схематично, код выглядит следующим образом: Код:
1.Создаю массив элементов меню:------ Модераторам: Переименуйте пожалуйста тему в "Некорректное срабатывание Tween" |
Ошибка судя по всему в твиновом классе, т.к. я тоже сталкивался с тем что твин "залипает" посреди движения, причем зависимость мне поймать не удалось, сложного ничего в моем коде небыло (просто меняется размер!)
|
Да, с залипанием твина проблема есть. Делал приложение где до 40 твинов одновременно выполняется какждые 5 секунд. Вероятность залипания гдето 1% была. Пришлось делать принудительный fforward всем твинам через небольшой промежуток после расчетного времени окончания.(твины были движение и смена прозрачности)
|
Спасибо за ответы.
Час просиживания в гугле, привел меня к следующему оттвету на одном из буржуйских форумов: 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. ------------------------ объясните пжл: Что они имеют в виду? |
Дошло....вобщем если создаешь внутри функции твин как локальную переменную, после исполнения функции ссылка исчезает и твин рискует быть собранным сборщиком мусора и перестанет работать соответственно. Ссылки на твины надо хранить в свойствах класса например, чтобы они не терялись. Поэтому и ошибка трудноуловимая.
Спасибо за информацию! |
Проблема не в переводе - с инглишем все в норме.. Я не понимаю смысл. Что значит "Ссылки на твины надо хранить в свойствах класса"?
Код:
package { |
Все так. Если в этой ситуации зависают, проверяй, закончился ли твин у клипа до присвоения ему нового. если нет - сначала принудительно заканчивай предыдущий или делай continueTo...
|
Цитата:
6а.Пробовал создать массив Tween-ов - не спасает. Код:
myTween[kkk] = new Tween(current_object, param, None.easeNone, startValue, finishValue, 0.5, true); |
сталкивался с аналогичной проблемой...
поробовал предложенное Torero решение... залипание стало меньше но все равно остается... как вариант в моем случае помог уход от Tween в пользу onEnterFrame..., но с tweenом, конечно, удобнее и код проще... |
Я не понимаю, а continueTo() в AS3 нет? У вас случайно твины друг с другом не бьются?
|
2Kikasso:
Цитата:
Цитата:
-------------- 2All: А нельзя-ли заблокировать переменную для удаления "garbage collector"-ом? |
Цитата:
храню ссылки на твины именно как ты описал выше, но когда нужно твинуть объект куда-нибудь дальше - то: 1. если двигается - stop() 2. если с этого же места надо двигать то continueTo() 3. если с другого то new Tween залипаний так нету. (ещё было как-то раз в практике залипание, если после MOTION_FINISH сразу новый твин делать) |
Окончательно решил проблему:
1)Переменная, описывающая Tween, должна быть определена в классе. 2)В случае множества Tween-ов, они должны описываться массивом переменных.. На самом деле, я зря на Kikasso грешил, все он правильно сказал - у меня в коде была ошибка (отсутствовала выделенная белым строка) и, как он выразился, "твины бились".. ХЗ почему компилятор вообще в ошибку не вываливался.. Вот полностью рабочий шаблон: (зависаний нет вообще) Код:
public Class SomeClass{Интересующимся: http://blog.illianced.com/2007/09/12/tween-oddities/ Данный вопрос разобран с примерами. |
Какое-то решение некрасивое, функция внутри функции ((
Борьбу твинов можно понаблюдать наглядно в это старой теме: http://flasher.ru/forum/showthread.php?t=98511&page=2 Это конечно совсем не AS3, но проблема такая же. |
Насчет того, что одна функция внутри другой - бралось из конкретного кода, в рамках которого это приемлемо. Важно чтобы переменная объявлялась в классе.
|
если использовать yoyo твины все-равно глючат. есть ли этому yoyo альтернатива?
|
| Часовой пояс GMT +4, время: 10:54. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.