我想制作一个迷你游戏,其中背景(迷宫)总是围绕同一个点旋转,这是一个位于舞台中间的不可移动的玩家MC。为了获得旋转,我使用了两个MC,一个旋转的父母,以及一个我希望根据鼠标/键盘移动移动的嵌套迷宫
不幸的是,迷宫上的x和y轴移动到90度,任何'up'移动都会变为'right'。
我确实意识到罪恶和cos或翻译矩阵应该做的伎俩,但由于某种原因,我无法做到正确。
这是一个简短的gif,总结了我的问题:http://blackdragonschronicles.strefa.pl/Public/Vertigo.gif 我非常感谢有关此事的任何帮助
答案 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。
谢谢!