Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

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

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

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

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

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

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
Цитата:
Писать один и тот же метод в каждый класс - явно не дело.
А для чего наследование придумали?

Эти статические методы будут работать только с одним спрайтом. Если нужно замигать сразу несколько, всё сломается.

Цитата:
Если у нас таймер с фиксированным количеством повторений, нужно ли явно убирать слушатель его событий?
Да.
Цитата:
И если да, то в каком месте кода?
По событию TIMER_COMPLETE.

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

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 429
Цитата:
Сообщение от illuzor Посмотреть сообщение
А для чего наследование придумали?
О, блин, и правда. Ларчик просто открывался. Спасибо
Про TIMER_COMPLETE тоже понял, спасибо.

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

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
ну да, эти спрайты должны наследоваться от класса "Подмигивающий", в котором и будет данная функция
__________________
while(live()) { hope(); }

Старый 13.11.2017, 17:56
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 5  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,269
если нет работы с 3d трансформациями, свойство scaleZ трогать ни к чему.Возможно отсюда и непонятные полосы.

Старый 14.11.2017, 14:13
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 6  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 429
Спасибо, undefined, всё верно, именно из-за него! Я уже и сам догадался. Всё-таки 15-летний стаж 3D-шника даёт о себе знать. Как-то без z-координаты непривычно тут во флешах

Старый 14.11.2017, 15:18
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 7  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,642
Записей в блоге: 4
Офтоп, но
Цитата:
Сообщение от Appleman Посмотреть сообщение
Всё-таки 15-летний стаж 3D-шника даёт о себе знать. Как-то без z-координаты непривычно тут во флешах
Как-то немножко не вяжется с
Цитата:
Цитата:
А для чего наследование придумали?
О, блин, и правда. Ларчик просто открывался. Спасибо
Про TIMER_COMPLETE тоже понял, спасибо.
__________________
Ко мне можно и нужно обращаться на ты)

Старый 14.11.2017, 15:20
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 8  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,269
3d необязательно программирование

Старый 14.11.2017, 15:21
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,642
Записей в блоге: 4
Цитата:
Сообщение от undefined Посмотреть сообщение
3d необязательно программирование
Ну тут, как бы тема о программировании. Поэтому мне такая мысль и пришла)
__________________
Ко мне можно и нужно обращаться на ты)

Старый 20.11.2017, 18:18
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 10  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 429
Подскажите ещё, плиз. Сделал в итоге потребный алгоритм мигания иконок через изменение их размеров по таймеру, даже с некоторым ускорением для пущей красоты анимации. Вот кусочек кода с принципиальным моментом:

Код AS3:
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;
			}
Изменение размеров реализовано через this.width и this.heigth. Проблема такая. Когда я делаю просто иконку для теста, она прекрасно "подмигивает", корректно изменяя свой размер. Но вот при встраивании объекта-иконки "в боевом режиме" она изменяет свой размер не относительно собственного цента, а относительно другой точки, судя по всему, нулевой координаты родительского объекта, хотя последнее я не проверял. В общем, они прыгают вверх-вниз, наискосок и как угодно. Как исправлять? Спасибо.

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:41.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 16:41.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.