|
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
ну да,в случае поворота это, вообще говоря, не будет scaleX/Y
|
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Цитата:
|
|
|||||
Цитата:
Вообще обычно делают функциональные объекты, т.е. классы, которые выполняют какую-то определённую роль. Например, окно, имеющее крестик и палочку для закрытия и сворачивания, диалоговое окно наследуется от окна и имеет некоторое изображение, управляет своим размером, сообщение и кнопки, ну и т.д. Но никак не классы для наследования от них визуальных эффектов. А эффекты вешаются на конкретный класс, выполняющий конкретную задачу. Например, захотели вы, чтобы ваше окно при закрытии выполняло анимацию масштабирование + выцветание, вы добавляете этот функционал в класс окна. Хотя зависит от задачи, конечно.
__________________
There is no thing in this world that is not simple. |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
Цитата:
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Мне, честно говоря, больше нравилась идея "статического" класса-менеджераЭффектов, чем наследование какого-то специального дисплейного класса, умеющего моргать.
Как это можно организовать, стоило посмотреть одним глазком на TweenMax или TweenLite. Кто помнит — синтаксис там выглядит довольно просто: TweenLite.to(oject, params); То есть у статического класса вызывается метод to(), которому отдается ссылка на управляемый объект и параметры [трансформации] (в том числе константа, указывающая на функцию трансформации). Как уже отмечали выше, статический класс не сможет "вести" одновременно несколько объектов, и TweenLite решает эту проблему элегантно: он создает индивидуальный ЭКЗЕМПЛЯР для каждого твина, и этот экземпляр обособленно ведет весь жизненный цикл запрошенной трансформации. Статический класс здесь выступает в роли фасада. Не будь у гринсоков столько вариантов функций, они бы запихали их прямо в фасад под статические константы для удобства и простоты синтаксиса. Для своего небольшого класса с 5-6 эффектами я бы так и сделал, чтоб не городить целую библиотеку классов.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Ребята, может быть я совсем деревянный, но у меня всё равно какая-то лажа с центровкой дочерних объектов. Я уже забил на все эти моргания, решив, что наверное правильнее не лениться и освоить специально созданные для этого инструменты типа Tween-ов. Но чтоб добро не пропадало, ограничил свой "моргающий" класс обычной Bitmap-иконкой. Добавил контейнер, отцентрировал его относительно this. И всё равно иконка смещается при масштабировании. Вот смотрите:
Один фиг, что контейнер дёргаю, что _iconPic, всё равно хотя бы чуть-чуть, но "едет". Что я делаю не так? |
|
|||||
Я думаю, тут большинство, включая меня вообще не понимает, что вы подразумеваете под "прыганием".
Если бы вы сразу выложили весь рабочий код и м.б. флешку вставили, то вам бы уже давно помогли.
__________________
There is no thing in this world that is not simple. |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Под "прыганием" я подразумеваю, что масштабирование иконки происходит не относительно её локального центра, а относительно других координат. Поэтому при масштабировании она не увеличивается равномерно во все стороны, а "съезжает" в одну. Почему так получается, не понимаю.
|
|
|||||
Appleman вы напишите полный код уже, который делает дела - и тот, который добавляет картинку, и тот, который её скаллирует, и тот, который добавляет листенеры и вообще весь, который относится к сути дела. Хотя, конечно, прикольная эдак игра у нас получается) Текстовая)
__________________
while(live()) { hope(); } |
|
|||||
var iconContainer:Sprite = new Sprite(); addChild(iconContainer); var icon:Shape = new Shape(); with(icon.graphics) { beginFill(0xff9922); drawRoundRect(0, 0, 50, 50, 10, 10); } iconContainer.addChild(icon); iconContainer.x = stage.stageWidth/2; iconContainer.y = stage.stageHeight/2; icon.x = -icon.width/2; icon.y = -icon.height/2; iconContainer.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent):void { var _this:DisplayObjectContainer = e.currentTarget as DisplayObjectContainer; _this.scaleX = _this.scaleY = 1.5; }); iconContainer.addEventListener(MouseEvent.MOUSE_UP, function(e:MouseEvent):void { var _this:DisplayObjectContainer = e.currentTarget as DisplayObjectContainer; _this.scaleX = _this.scaleY = 1; }); Код для Adobe Flash import fl.transitions.Tween; import fl.transitions.easing.Elastic; var iconContainer:Sprite = new Sprite(); addChild(iconContainer); var icon:Shape = new Shape(); with(icon.graphics) { beginFill(0xff9922); drawRoundRect(0, 0, 50, 50, 10, 10); } iconContainer.addChild(icon); iconContainer.x = stage.stageWidth/2; iconContainer.y = stage.stageHeight/2; icon.x = -icon.width/2; icon.y = -icon.height/2; iconContainer.addEventListener(MouseEvent.ROLL_OVER, function(e:MouseEvent):void //mouse over { var tween:Tween = new Tween(iconContainer, "scaleX", Elastic.easeOut, 1, 1.5, 0.6, true); tween = new Tween(iconContainer, "scaleY", Elastic.easeOut, 1, 1.5, 0.6, true); }); iconContainer.addEventListener(MouseEvent.ROLL_OUT, function(e:MouseEvent):void //mouse out { tween = new Tween(iconContainer, "scaleX", Elastic.easeOut, 1.5, 1, 0.6, true); tween = new Tween(iconContainer, "scaleY", Elastic.easeOut, 1.5, 1, 0.6, true); });
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 23.11.2017 в 12:49. |
Часовой пояс GMT +4, время: 02:14. |
|
« Предыдущая тема | Следующая тема » |
|
|