Просмотр полной версии : Увеличение объекта из центра с помощью scale
Доброго времени суток. Подскажите пожалуйста, есть ли возможность увеличивать объект с помощью scaleX и scaleY из координаты его центра? При использовании scale объект увеличивается и координаты x и y не меняются, а задача состоит в том, чтобы координаты меняли в зависимости от увеличения объекта.
alexandrratush
09.12.2013, 11:11
Как вариант нужно одновременно менять координаты Х и У, или если это мувик из библиотеки, то можно сместить точку регистрации по центру объекта. Еще есть вариант програмно сменить точку регистрации дисплейобжекта. Что вам лучше подходит?
Мувклип добавляю addChild'ом, поэтому наверное вариант с программным изменением точки. Подскажите пожалуйста как это можно организовать.
alexandrratush
09.12.2013, 11:25
Вот пример http://www.emanueleferonato.com/2010/08/04/changing-a-movieclip-registration-point-on-the-fly-with-as3/
Наверное попроще будет вариант с одновременной сменой координат x и y. Это можно организовать с помощью getBounds( )?
http://www.flasher.ru/forum/showpost.php?p=960661&postcount=14
KumoKairo
09.12.2013, 13:18
Можно еще сделать уловку с вложенными DisplayObject и шкалировать без всяких translate и смены координат.
Делаем пустой Sprite
var sprite:Sprite = new Sprite();
Добавляем в него ваш мувик и перемещаем его относительно sprite таким образом, чтобы точка (0.0) спрайта совпадала с центом вашего мувика:
//предположим что scaleObject - это ваш мувик
sprite.addChild(scaleObject);
//теперь меняя координаты scaleObject мы меняем их относительно sprite, а не относительно глобальной системы координат
scaleObject.x = -scaleObject.width/2;
scaleObject.y = -scaleObject.height/2;
//Теперь обращаемся с нашим объектом только через sprite. Перемещение и шкалирование будет производиться от центра объекта
sprite.scaleX = sprite.scaleY = 1.5;
Akopalipsis
09.12.2013, 13:53
public static function scalePoint(target:DisplayObject, scaleX:Number, scaleY:Number, point:Point):void
{
var dXS:Number = (target.x - point.x) / target.scaleX;
var dYS:Number = (target.y - point.y) / target.scaleY;
target.scaleX = scaleX;
target.scaleY = scaleY;
target.x = point.x + dXS * target.scaleX;
target.y = point.y + dYS * target.scaleY;
}
Всем огромное спасибо. KumoKairo, Ваш вариант подошёл.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.