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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.11.2013, 13:56
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 1  
Ответить с цитированием
Akopalipsis
Banned

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
Поработай над названиями, может станет понятней что это.
Спасибо за совет! Попробую и покажу.
Цитата:
Мне еще непонятно почему екстенд ивентДиспатчер, хотя ни одного ивента нету.
По двум причинам, от которых я не могу пока отделаться, так как ещё не подошёл в плотную к применению.

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
Мне еще непонятно почему екстенд ивентДиспатчер, хотя ни одного ивента нету.
Для понта. Я вот например в контроллерах extends Object делаю иногда, веселит меня это...
Тут больше интересно зачем АйФейсы ! Видимо тоже для понта, - не пихайте айФейсы просто так, они нужны в конкретных реализациях а не в классах утилитах, да еще и непонятно для чего
__________________
Марк Tween

Старый 18.11.2013, 15:11
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 3  
Ответить с цитированием
Akopalipsis
Banned

Регистрация: Mar 2013
Сообщений: 1,864
Мне кажется, вот только как смог сократить код.
Цитата:
Тут больше интересно зачем АйФейсы !
Не для понта! Неужели, Вы опытные люди не понимаете для чего это?) я бы увидев такую постановку,
сразу понял, для чего это и от куда ноги растут. Ну а диспетчер нужен, так как интерфейс расширяет IED.
Но я не знаю пока как решить это. И интерфейс нужен на сто процентов и диспетчера тащить не хочется в этот класс.
Код AS3:
package 
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.display.DisplayObject;
	import flash.geom.Point;
	import flash.geom.Rectangle;
 
	public class ScalePlugin
	{
		private static var _eventDispatcher:EventDispatcher = new EventDispatcher();
 
		private var _object:DisplayObject;
		private var _point:Point;
		private var _bounding:Rectangle;
		private var _delay:Number;
		private var _currentTime:Number;
		private var _totalTime:Number;
 
		private var _coefficientWidth:Number;
		private var _coefficientHeight:Number;
 
		private var _speedWidth:Number;
		private var _speedHeight:Number;
 
		private var _speedX:Number;
		private var _speedY:Number;
 
		private var _finishX:int;
		private var _finishY:int;
 
		private var _scaleX:Number;
		private var _scaleY:Number;
		private var _callBack;
		private var _isCallBack:Boolean;
 
		public function setScale(object:DisplayObject,
										   scaleX:Number = 1.0,
										   scaleY:Number = 1.0,
										   delay:Number = 1.0,
										   point:Point = null,
										   callBack:Function=null,
										   bounding:Rectangle=null):void
		{
			if (!_object)
			{
				_object = object;
				_coefficientWidth = _object.width / 100;
				_coefficientHeight = _object.height / 100;
				_bounding = bounding;
			}
			if (!point) 
			{
				_point = new Point();
				_point.x = _object.width / 2 + _object.x;
				_point.y = _object.height / 2 + _object.y;
			}
			else 
			{
				_point = point;
			}
 
			_scaleX = scaleX;
			_scaleY = scaleY;
			_delay = delay;
			if (callBack)
			{
				_callBack = callBack;
				_isCallBack = true;
			}
			_currentTime = 0;
 
			//разница между текущеми и финишными размерами
			var differenceWidth:Number = _coefficientWidth * scaleX * 100 - _object.width;
			var differenceHeight:Number = _coefficientHeight * scaleY * 100 - _object.height;
 
			//время которое будет затрачено на увеличение
			_totalTime = differenceWidth / _coefficientWidth * (_delay / 100);
 
			//если время отрицательное делаем его положительным
			if (_totalTime < 0) _totalTime *= -1;
 
			_speedWidth = differenceWidth / _totalTime;
			_speedHeight = differenceHeight / _totalTime;
 
			//узнаем разницу между выбранной точкой и координатами обьекта
			var shiftX:Number = _point.x -_object.x;
			var shiftY:Number = _point.y - _object.y;
 
			//вычитаемое - растояние, уменьшив на которое значение координат обьекта, получим финишные координаты
			var subtrahendX:Number = shiftX - (_coefficientWidth * 100 * scaleX) / (_object.width / shiftX);
			var subtrahendY:Number = shiftY -  (_coefficientHeight * 100 * scaleY) / (_object.height / shiftY);
 
			_finishX = _object.x + subtrahendX;
			_finishY = _object.y + subtrahendY;
 
			if (_bounding)
			{
				if (_finishX > _bounding.x)_finishX = _bounding.x;
				if (_finishY > _bounding.y)_finishY = _bounding.y;
				if (_finishX < _bounding.x - ((_coefficientWidth * 100 * scaleX) - _coefficientWidth * 100))_finishX = _bounding.x - ((_coefficientWidth * 100 * scaleX) - _coefficientWidth * 100);
				if (_finishY < _bounding.y - ( (_coefficientHeight * 100 * scaleY) - _coefficientHeight * 100))_finishY = _bounding.y - ( (_coefficientHeight * 100 * scaleY) - _coefficientHeight * 100);
			}
			_speedX = (_finishX - _object.x) / _totalTime;
			_speedY = (_finishY - _object.y) / _totalTime;
 
		}
		public function advanceTime(time:Number):void 
		{
			_currentTime += time;
			if ( _currentTime  >  _totalTime )
			{
				var finishWidth:int = _coefficientWidth * _scaleX * 100;
				var finishHeight:int = _coefficientHeight * _scaleY * 100;
 
				_object.width = finishWidth;
				_object.height = finishHeight;
 
				_object.x = int(_finishX);
				_object.y = int(_finishY);
				_eventDispatcher.dispatchEvent(new Event(Event.COMPLETE));
				return; 
			}
			_object.width = time * _speedWidth+_object.width;
			_object.height = time*_speedHeight+_object.height;
			_object.x = time*_speedX+_object.x;
			_object.y = time * _speedY + _object.y
			/*if (_isCallBack)
			{
				_callBack(params);
			}*/
		}
	}
 
}

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Ну вот мы как грамотные люди не можем понять зачем тут айфейсы, расскажи нам!
Цитата:
private static var _eventDispatcher:EventDispatcher = new EventDispatcher();
Какой смысл в статической приватной переменной, если у вас нет даже статик методов? Делаем extends
public function setScale(someBitmap) - что будет? Или по вашему битмапу скейлить не приходится?

Добавлено через 1 минуту
_eventDispatcher.dispatchEvent(new Event(Event.COMPLETE)); - куда пойдет это событие в черную дыру?
__________________
Марк Tween

Старый 18.11.2013, 15:25
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 5  
Ответить с цитированием
Akopalipsis
Banned

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
Какой смысл в статической приватной переменной, если у вас нет даже статик методов?
А вот тут у меня вопросы, если сделать статическую public переменную, то она станет одна для всех екземпляров, то есть я предполагал, что если будет сто экземпляров, то _eventDispatcher не будет создаваться сто раз, а создастся лишь добавит ссылку на одно и тоже свойство.. Это не так?
Цитата:
Или по вашему битмапу скейлить не приходится?
Так тут без разницы что масштабировать.
Цитата:
_eventDispatcher.dispatchEvent(new Event(Event.COMPLETE)); - куда пойдет это событие в черную дыру?
Да, Спасибо! Только сейчас дошло, что на обьект не подпишешься, так диспетчера же нет. Вот тогда лучший вариант,
в классе который ждет событие и создавать статик свойство с диспетчером и на него же и подписаться.
Можно было бы и сам класс наследовать от ED, но я пока собираюсь его только в одном месте использовать, да и если понадобится,
то изменить не долго.


Последний раз редактировалось Akopalipsis; 18.11.2013 в 15:46.
Старый 18.11.2013, 16:14
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 6  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Ну вот как будет возможность проверить так и отпишитесь.
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
Так тут без разницы что масштабировать.
Да, совсем забыл, что битмап эксденс ДО.

Цитата:
А вот тут у меня вопросы, если сделать статическую public переменную, то она станет одна для всех екземпляров, то есть я предполагал, что если будет сто экземпляров, то _eventDispatcher не будет создаваться сто раз, а создастся лишь добавит ссылку на одно и тоже свойство.. Это не так?
Делается статик утилита полностью с методом add(vector) либо addElement(do) . Это утилита - ей совершенно не нужно быть экземпляром.

Цитата:
Да, Спасибо! Только сейчас дошло, что на обьект не подпишешься, так диспетчера же нет. Вот тогда лучший вариант,
в классе который ждет событие и создавать статик свойство с диспетчером и на него же и подписаться.
Можно было бы и сам класс наследовать от ED, но я пока собираюсь его только в одном месте использовать, да и если понадобится,
то изменить не долго.
Я уже сказал - делать надо extends EventDispatcher. Либо если пойдете по пути статика, то метод addListener(name, function) , а внутри работает со своим приватным диспатчером.
Как то так
Код AS3:
ScaleUtils.addElement(someDO);
ScaleUtils.addListener(Event.COMPLETE , f);
ScaleUtils.scaleAll(); // flush all elements
__________________
Марк Tween

Старый 18.11.2013, 16:45
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 8  
Ответить с цитированием
Akopalipsis
Banned

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
Я уже сказал - делать надо extends EventDispatcher. Либо если пойдете по пути статика, то метод addListener(name, function)
Спасибо! Это наверное далеко не последний вариант, потому как сейчас просто думаю, как удобней все такие классы собрать. Собрать не как проще, а так, чтобы на каждое обращение не было лишних переходов и действий.

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Цитата:
перерисовывал залитый спрайт в цельную битмапу и масштабировал ее
А сглаживание установлено? Может помочь. Много кому не нравится ибо замылено получается, но тут можно попробовать.
Код AS3:
bmp.smoothing = true
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 19.11.2013, 12:55
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 10  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
да, как вариант, все же лучше выглядит чем разница в линиях в 1 пиксель

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

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

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


 


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


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