Показать сообщение отдельно
Старый 13.11.2017, 17:19
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 1  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
По умолчанию Подмигнуть :)

Друзья, столкнулся с такой проблемой. На экране размещаются иконки - экземпляры 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() {}
	}
Запускается без ошибок, но при запуске на экране начинается фигня с появлением разноцветных полос В общем, не работает как надо. Что я делаю не так?

И ещё прикладной вопрос вдогонку. Если у нас таймер с фиксированным количеством повторений, нужно ли явно убирать слушатель его событий? И если да, то в каком месте кода?