AS3中的旋转和移动

时间:2014-09-22 11:22:46

标签: actionscript-3 rotation

我想制作一个迷你游戏,其中背景(迷宫)总是围绕同一个点旋转,这是一个位于舞台中间的不可移动的玩家MC。为了获得旋转,我使用了两个MC,一个旋转的父母,以及一个我希望根据鼠标/键盘移动移动的嵌套迷宫

不幸的是,迷宫上的x和y轴移动到90度,任何'up'移动都会变为'right'。

我确实意识到罪恶和cos或翻译矩阵应该做的伎俩,但由于某种原因,我无法做到正确。

这是一个简短的gif,总结了我的问题:http://blackdragonschronicles.strefa.pl/Public/Vertigo.gif 我非常感谢有关此事的任何帮助

2 个答案:

答案 0 :(得分:0)

您可以使用矩阵来解决这个问题。 在我的小例子中,我有一个名为 box 的movieclip坐在舞台上。它的枢轴位于左上角(0,0)。如果我想从中心旋转立方体,我首先将矩阵的宽度和高度的一半转换。然后我以任意角度旋转它,最后将矩阵变换应用到我的框中。

var angle:Number = Math.PI/64;

var m:Matrix = new Matrix();
m.translate(-box.width >> 1, -box.height >> 1);

stage.addEventListener(Event.ENTER_FRAME, loop);
function loop(e:Event):void {
    m.rotate(angle);
    box.transform.matrix = m;
}

同样的精神,您可以使用当前的世界位置翻译矩阵。并围绕该点旋转。

m.translate(position.x, position.y);

您可以在AS3 here 中详细了解矩阵。

答案 1 :(得分:0)

感谢您提供的链接,Iggy,我已经设法了解我想要做什么以及如何做。我使用了另一种针对这种情况的方法。这是代码

import flash.events.Event;
import flash.geom.Matrix;
import fl.motion.MatrixTransformer;

addEventListener(Event.ENTER_FRAME,eF);

//Set rotation pivot
var RotationAt:Point = new Point(player.x,player.y);
//Center the MC at the player/pivot
mc.x = player.x
mc.y = player.y

function eF(e:Event){
    var my_matrix = mc.transform.matrix;//needs to be refreshed all the time

    MatrixTransformer.rotateAroundExternalPoint(my_matrix,player.x,player.y,1);

    mc.transform.matrix = my_matrix; // changes the rotation
}

后来我只需要添加代码,用鼠标当前位置来减去x和y。

谢谢!