我使用matrix.rotate方法旋转矩形(在我的情况下为框)。 我的旋转事件如下所示
public function transformObject(transformEvent:TransformEvent):void {
var numChildrn:int = _markedObjectLayer.numChildren;
var tempMatrix: Matrix = null;
var tempx:Number;
var tempy:Number;
var tempHeight:Number;
var tempWidth:Number;
for(var i:int = 0; i < numChildrn; i++){
var chld:MarkedObject = ObjectLayer.getChildAt(i)
if (chld.selected){
var height:int = (BoxObject) chld.height;
var width:int = (BoxObject) chld.width;
tempMatrix = chld.transform.matrix;
tempHeight=height;
tempWidth=width;
tempMatrix = MatrixTransformer.transform(tempMatrix,transformEvent.angle);
tempMatrix.tx=tempx;
tempMatrix.ty=tempy
chld.transform.matrix = tempMatrix;
}
}
invalidateDisplayList();
}
}
Matrix.transform方法调用matrix.rotate方法
public static function transform(sourceMatrix:Matrix, rotation:Number = 0):Matrix {
sourceMatrix = MatrixTransformer.rotate(sourceMatrix, rotation, "degrees");
return sourceMatrix;
}
/**
* Rotates a matrix and returns the result. The unit parameter lets the user specify "degrees",
* "gradients", or "radians".
*/
public static function rotate(sourceMatrix:Matrix, angle:Number, unit:String = "radians"):Matrix {
if (unit == "degrees")
{
angle = Math.PI * 2 *( angle / 360);
}
sourceMatrix. rotate(angle)
return sourceMatrix;
}
问题是x和y是盒子的左侧核心,因此它绕左角旋转。但是,如果我尝试将temp.x和temp.y作为质心值,它不会围绕质心旋转?
任何人都可以建议我在这里做错了吗?
由于 阿克沙伊
答案 0 :(得分:0)
如果您确实想要或必须直接使用矩阵,可以使用内置闪存类更方便地完成此操作:fl.motion.MatrixTransformer
:
MatrixTransformer.rotateAroundInternalPoint(matrix, centroidX, centroidY, angleInDegrees);
有关详细信息,请参阅MatrixTransformer
上的Adobe docs。
但是,如果你不需要来使用转换矩阵,那么更简单的解决方案是:
rotation
中的简单DisplayObject
属性,以更简单的方式实现相同的目标答案 1 :(得分:0)
想出来。似乎我没有将它们转换为旋转前后的适当坐标位置
//步骤1修复矩形的坐标。我将它们添加到一个事件中,以便它们保持静止
if (TransformEvent.X == 0 && TransformEvent.Y == 0)
{
TransformEvent.X = chld.x;
TransformEvent.Y = chld.y;
}
//接下来获取矩形的质心
tempx = TransformEvent.X + width/2;
tempy= TransformEvent.Y +height/2;
//第3步:在轮换前翻译
tempMatrix.translate(-1*tempx,-1*tempy);
//旋转矩形
tempMatrix = MatrixTransformer.transform(tempMatrix,transformEvent.angle);
//在旋转后转换为质心
tempMatrix.translate(tempx,tempy);
//将矩阵分配回矩形
chld.transform.matrix = tempMatrix;
感谢您的帮助。这个网站也帮我翻译了一下 http://www.foxarc.com/blog/article/66.htm