PDA

Просмотр полной версии : Увеличение объекта из центра с помощью scale


dendead
09.12.2013, 10:28
Доброго времени суток. Подскажите пожалуйста, есть ли возможность увеличивать объект с помощью scaleX и scaleY из координаты его центра? При использовании scale объект увеличивается и координаты x и y не меняются, а задача состоит в том, чтобы координаты меняли в зависимости от увеличения объекта.

alexandrratush
09.12.2013, 11:11
Как вариант нужно одновременно менять координаты Х и У, или если это мувик из библиотеки, то можно сместить точку регистрации по центру объекта. Еще есть вариант програмно сменить точку регистрации дисплейобжекта. Что вам лучше подходит?

dendead
09.12.2013, 11:21
Мувклип добавляю addChild'ом, поэтому наверное вариант с программным изменением точки. Подскажите пожалуйста как это можно организовать.

alexandrratush
09.12.2013, 11:25
Вот пример http://www.emanueleferonato.com/2010/08/04/changing-a-movieclip-registration-point-on-the-fly-with-as3/

dendead
09.12.2013, 11:58
Наверное попроще будет вариант с одновременной сменой координат x и y. Это можно организовать с помощью getBounds( )?

alatar
09.12.2013, 12:41
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;
}

dendead
09.12.2013, 13:56
Всем огромное спасибо. KumoKairo, Ваш вариант подошёл.