|
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Мне кажется, вот только как смог сократить код.
Цитата:
сразу понял, для чего это и от куда ноги растут. Ну а диспетчер нужен, так как интерфейс расширяет IED. Но я не знаю пока как решить это. И интерфейс нужен на сто процентов и диспетчера тащить не хочется в этот класс. 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); }*/ } } } |
|
|||||
[+4 06.05.14]
|
Ну вот мы как грамотные люди не можем понять зачем тут айфейсы, расскажи нам!
Цитата:
public function setScale(someBitmap) - что будет? Или по вашему битмапу скейлить не приходится? Добавлено через 1 минуту _eventDispatcher.dispatchEvent(new Event(Event.COMPLETE)); - куда пойдет это событие в черную дыру?
__________________
Марк Tween |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
Цитата:
Цитата:
в классе который ждет событие и создавать статик свойство с диспетчером и на него же и подписаться. Можно было бы и сам класс наследовать от ED, но я пока собираюсь его только в одном месте использовать, да и если понадобится, то изменить не долго. Последний раз редактировалось Akopalipsis; 18.11.2013 в 15:46. |
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
в том то и проблема, битмапа при скэйле должна увеличиваться пропорционально scale, полная перерисовка заливки решит проблему со стыками? (не могу сейчас, к сожалению, проверить ), если нет какие есть еще варианты решения.
|
|
|||||
[+4 06.05.14]
|
Цитата:
Цитата:
Цитата:
Как то так
__________________
Марк Tween |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
|
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
Цитата:
p.s. битмап в будущем будет сложней, программно или в векторе нарисовать ее будет проблематично. для меня видятся несколько вариантов решения: 1. рисовать битмапу всегда одного размера, но это не желательно , так как относительно фона объекты будут намного меньше при скейле меньше 1, можно конечно использовать мелкую текстуру, а не плитки, но желательно чтобы плитку тоже можно было рисовать. 2. иметь несколько вариантов битмапы, для каждого значения скейла. (минус - их надо грузить); 3. рисовать в векторе, не желательно, хочется брать текстуры из интернета, а не рисовать самостоятельно. Но все эти варианты - какие-то костыли , можно ли что-нибудь еще сделать, размеры базового спрайта неизменны, интервал изменения scale от 0.5 до 1 ? Последний раз редактировалось Isfet; 19.11.2013 в 08:17. |
|
|||||
Цитата:
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
да, как вариант, все же лучше выглядит чем разница в линиях в 1 пиксель
|
Часовой пояс GMT +4, время: 00:56. |
|
« Предыдущая тема | Следующая тема » |
|
|