Appleman |
13.11.2017 17:19 |
Подмигнуть :)
Друзья, столкнулся с такой проблемой. На экране размещаются иконки - экземпляры Sprite. Для них планируется несколько простых эффектов. Например, при определённых событиях модели, иконка должна уметь "подмигнуть" - изменить свой размер один или несколько раз, чтобы привлечь внимание пользователя. Загвоздка в том, что каждая иконка - это отдельный класс, а эффекты для них одни и те же. Писать один и тот же метод в каждый класс - явно не дело.
Сделал "статический" класс с нужным мне методом:
Код AS3:
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() {}
}
Запускается без ошибок, но при запуске на экране начинается фигня с появлением разноцветных полос :) В общем, не работает как надо. Что я делаю не так?
И ещё прикладной вопрос вдогонку. Если у нас таймер с фиксированным количеством повторений, нужно ли явно убирать слушатель его событий? И если да, то в каком месте кода?
|