增加宽度而不移动图像

时间:2013-05-06 19:12:03

标签: actionscript-3 matrix resize width pivot

我正在开发一个绘图应用程序,我遇到了一个问题,一个可能的解决方案是能够水平调整图像(增加或减少宽度)而不改变它的轴,但以“ “方向调整大小”,意思是,如果我开始拖动右侧调整大小的锚点,图像会开始向右增加宽度,而不是始终考虑枢轴。

所以,我现在正在做的是增加宽度,同时我移动图像宽度/ 2,它可以工作,但是当我必须旋转图像时...一切都开始破碎,甚至如果我在枢轴中间设置枢轴,因为图像(包含在精灵中)x被改变了,所以没关系。

我已经阅读了一些关于矩阵的内容,但我不确定这是否可行。

感谢。

1 个答案:

答案 0 :(得分:2)

有几种方法可以实现这一目标。第一种是使用变换矩阵。 这是我用来以这种方式围绕一个点旋转对象的函数:

*您需要导入fl.motion.MatrixTransformer,如果不使用flashPro,您可以在此处获取:https://code.google.com/p/artitem-as3/source/browse/trunk/ArtItem/src/fl/motion/MatrixTransformer.as?r=3

                 /**
                 * Rotates a displayObject around the passed local point.
                 * @param   displayObj
                 * @param   relativeDegrees - the relative amount of degrees to rotate the object
                 * @param   point - a local point to rotate the object around, if null, center of bounding box will be used.
                 */
                public static function rotateAroundPoint(displayObj:DisplayObject, relativeDegrees:Number, point:Point = null):void {
                    var m:Matrix  = displayObj.transform.matrix.clone();

                    if (!point) {
                        //default is center of bounding box
                        var r:Rectangle = displayObj.getBounds(displayObj);
                        point = new Point(r.x + (r.width * .5), r.y + (r.height * .5));
                    }
                    MatrixTransformer.rotateAroundInternalPoint(m, point.x, point.y, relativeDegrees);
                    displayObj.transform.matrix = m;
                }

另一种更懒惰的方法是使用虚拟父对象并旋转:

var dummy:Sprite = new Sprite();
dummy.addChild(yourObjectToRotate);

//this effectively makes the anchor point of dummy in the center, so when you rotate it it rotate from the center.
yourObjectToRotate.x = -(yourObjectToRotate.width * .5);
yourObjectToRotate.y = -(yourObjectToRotate.height * .5);

dummy.rotation = 90;