|
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Подмигнуть :)
Друзья, столкнулся с такой проблемой. На экране размещаются иконки - экземпляры Sprite. Для них планируется несколько простых эффектов. Например, при определённых событиях модели, иконка должна уметь "подмигнуть" - изменить свой размер один или несколько раз, чтобы привлечь внимание пользователя. Загвоздка в том, что каждая иконка - это отдельный класс, а эффекты для них одни и те же. Писать один и тот же метод в каждый класс - явно не дело.
Сделал "статический" класс с нужным мне методом: public class VisualEffects extends Sprite { private static var _component:Sprite; private static var _times: uint; private static var _originalScale:uint = 1; private static var _blinkingScale:Number; private static var _nextScale:Number; public static function blink(component: Sprite, scaling: Number, times: uint): void { var blinkTimer:Timer = new Timer(100, times); _component = component; _times = times; _blinkingScale = _originalScale + scaling; _nextScale = _blinkingScale; blinkTimer.addEventListener(TimerEvent.TIMER, VisualEffects.changeSize); blinkTimer.start(); } private static function changeSize(event:TimerEvent) : void { _component.scaleX = _nextScale; _component.scaleY = _nextScale; _component.scaleZ = _nextScale; if (_nextScale == _blinkingScale) _nextScale = _originalScale; else _nextScale = _blinkingScale; } public function VisualEffects() {} } И ещё прикладной вопрос вдогонку. Если у нас таймер с фиксированным количеством повторений, нужно ли явно убирать слушатель его событий? И если да, то в каком месте кода? |
|
|||||
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Цитата:
Эти статические методы будут работать только с одним спрайтом. Если нужно замигать сразу несколько, всё сломается. Цитата:
Цитата:
|
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
О, блин, и правда. Ларчик просто открывался. Спасибо
Про TIMER_COMPLETE тоже понял, спасибо. |
|
|||||
ну да, эти спрайты должны наследоваться от класса "Подмигивающий", в котором и будет данная функция
__________________
while(live()) { hope(); } |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
если нет работы с 3d трансформациями, свойство scaleZ трогать ни к чему.Возможно отсюда и непонятные полосы.
|
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Спасибо, undefined, всё верно, именно из-за него! Я уже и сам догадался. Всё-таки 15-летний стаж 3D-шника даёт о себе знать. Как-то без z-координаты непривычно тут во флешах
|
|
|||||
Офтоп, но
Цитата:
Цитата:
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
3d необязательно программирование
|
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Подскажите ещё, плиз. Сделал в итоге потребный алгоритм мигания иконок через изменение их размеров по таймеру, даже с некоторым ускорением для пущей красоты анимации. Вот кусочек кода с принципиальным моментом:
public function blink(times: uint): void { _totalTimes = times; _blinkTimer = new Timer(30); _blinkTimer.addEventListener(TimerEvent.TIMER, changeSize); _blinkTimer.start(); } private function changeSize(event:TimerEvent) : void { //кусок кода пропущен else if (_increasingPhase == true) { if (_totalResize <= MAX_PIXELS_SCALED) { _totalResize += (_oneFrameInsrease + _speedUp); this.width += (_oneFrameInsrease + _speedUp); this.height += (_oneFrameInsrease + _speedUp); _speedUp += _speedUp; } else _increasingPhase = false; } |
Часовой пояс GMT +4, время: 12:50. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|