![]() |
Проблема с Event
Пытаюсь сделать анимацию клика. Создал сам MovieClip (расширяющийся кружочек из точки клика).
Сначала добавлял один экземпляр и в случае клика в другом месте, не закончившаяся анимация исчезала и воспроизводилась заново в новом месте. Всё работало. Решил сделать, что бы при каждом новом клике создавался новый экземпляр не мешая окончиться предыдущему. Но столкнулся с проблемой, в случае с одним экземпляром, переменная которого объявлялась ещё в самом классе, я без проблем обращался к номеру кадра этого экземпляра, и когда он оканчивался, я удалял его. Сейчас каждый новый экземпляр создаётся в функции ивента клика мышкой по сцене. И я не пойму как правильно написать Слушатель ON_ENTER_FRAME для каждого экземпляра. Всё время ошибки, и currentFrame всегда 1. Вот то, что сделано на текущий момент (не работает): Код AS3:
|
В методах onEnter и onRemoved, замените this на
Код AS3:
|
samana давно подметил, что Вы очень хорошо знаете тему анимация, по этому задам Вам вопрос - в программе ( фп ) всегда работает EnterFrame и запись
Код AS3:
|
Цитата:
|
Да, лучше все объекты запихнуть в массив, и в одном энтерФрейме через цикл изменять в них свойства.
А лучше вообще сделать один энтерФрейм для всего приложения. caseyryan опередил) |
Цитата:
Код AS3:
|
Так вы добавляете в Main класс, всё верно.
|
caseyryan Спасибо! Тогда такой вопрос - подписывая circle на ENTER_FRAME, мы передаём listener в EventDispatcher, где он помещается в массив и при каждом тике, вызываются все listeners из массива. Если сделать отдельный класс для ENTER_FRAME, то в моём понимании, это будет выглядеть так - создали экземпляр и чтобы подписаться на его тики, мы передаем в него ссылку на класс с методом, который должен вызываться каждый тик. Передав ссылку в класс ENTER_FRAME, она помещается в массив и каждый тик, этот массив перебирается циклом и вызывает нужный метод. Получается тоже самое.
По этому мне кажется, что я не понимаю, как сделать один класс с ENTER_FRAME. Где я ошибаюсь? Добавлено через 5 минут Цитата:
Код AS3:
Код AS3:
Код AS3:
|
И ещё вопрос, получается при каждом новом щелчке создаётся новый объект, как к этим объектам можно обратиться? Ведь их может быть бесконечно много. И как их можно сделать доступными для сборщика мусора, после удаления?
Добавлено через 10 минут Сначала я сделал один экземпляр CircleAnimation в самом классе, всё отлично работало. Просто стало интересно как сделать так, что бы анимация не обрывалась при новом щелчке в другом месте. Может есть ещё какой-то менее ресурсозатратный способ? Добавлено через 14 минут А если я в самом классе CircleAnimation напишу, что бы он удалялся из родительского объекта после воспроизведения, будет лучше? Но, как я понимаю там опять же ENTER_FRAME нужно будет использовать. |
Цитата:
Я сделал тест - подписал сто тысяч объектов, каждый на свой ентерФрейм, результат - 5 fps. А когда в цикле пробегал по этим ста тысячам - 16 fps. Добавлено через 29 минут LIGHTHILL Не забудьте, когда удаляете экземпляр CircleAnimation, остановить его внутренний енретФрейм. А то ещё некоторое время будет висеть в памяти, пока сборщик мусора не проснётся. Код AS3:
|
| Часовой пояс GMT +4, время: 18:09. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.