Вращение опорной точки проблема центрирования в AS3 - PullRequest
1 голос
/ 30 января 2011

У меня следующая проблема.У меня есть MovieClip в держателе MC.

Я бы хотел повернуть внутренний MC X с параметром поворота и по-прежнему держать его в держателе mc справа и снизу от контрольной точки MC держателя.Так что после поворота это должно выглядеть так:

+------ 
|X
|

, а не

 X
+------
|
|

Кто-нибудь может сказать мне, как это сделать?В основном это функция, которая принимает любой X, повернутый на любые градусы до X.rotation = ..., и возвращает его на место в держателе MC.

спасибо

Ответы [ 3 ]

1 голос
/ 30 января 2011

Один из возможных способов состоит в том, чтобы вращающийся MC имел точку регистрации в центре, но это также зависит от формы ваших вращающихся MC.Для сложной формы, вы можете иметь повернутый MC внутри круга.Окружность круга будет создана вращением самой внешней точки вращающегося mc.Таким образом, точка регистрации вашего круга становится точкой регистрации вращающегося mc.Способ реализации этой реализации зависит от вашей среды разработки, с Flash IDE, это довольно просто ...

0 голосов
/ 01 февраля 2011

Функция, подобная этой?

function getPositionOffset(rotation:Number, origin:Point):Point
{
    var radVal:Number= Math.PI * rotation / 180;

    var offsetX:Number = origin.x - origin.x * Math.cos(radVal)
        + origin.y * Math.sin(radVal);
    var offsetY:Number = origin.y - origin.x * Math.sin(radVal)
        - origin.y * Math.cos(radVal);

    return new Point(offsetX, offsetY);
}

Затем вы поворачиваете объект следующим образом:

// original position before any rotation
var originalX:Number = obj.x;
var originalY:Number = obj.y;

// let's say origin for a 100x100 object is 50,50
var origin:Point = new Point(50, 50);

// rotation: 45
var pt:Point = getPositionOffset(45, origin);

obj.rotation = 45;

obj.x = Math.floor(originalX + pt.x);
obj.y = Math.floor(originalY + pt.y);

Ну, это общая идея.Вы могли бы улучшить это, не требуя значений originalX и originalY перед вращением и вместо этого рассчитать их (используя текущее вращение и положение).

0 голосов
/ 30 января 2011

скажем, вы хотите повернуть mc_child внутри mc_parent на 0,5

tempSprite:Sprite = new Sprite();
tempSprite.x = mc_child.x;
tempSprite.y = mc_child.y;
mc_parent.addChild(tempSprite);

mc_child.rotation += 0.5;

addChild(mc_child);

Если смена родителя является проблемой, вы можете использовать матричное преобразование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...