2013-05-06 2 views
0

Я разрабатываю приложение для рисования, и у меня возникла проблема, и возможным решением могло бы быть изменение размера по горизонтали (увеличение или уменьшение ширины) изображения без изменения его оси, но заканчивая «направленным изменением размера», это означает, что если я начну перетаскивать правый винт изменения размера, изображение начнет увеличивать его ширину вправо, вместо того, чтобы всегда принимать во внимание шарнир.Увеличьте ширину без движущегося изображения

Итак, что я делаю сейчас, это увеличить ширину и в то же время перемещать ширину изображения/2, это работает, однако, когда мне нужно повернуть изображение. Все начинает разрываться, и даже если я устанавливаю стержень в середине спрайта, так как изображение (содержащееся внутри спрайта) x изменяется, это не имеет значения.

Я читал некоторые о матрицах, но я не уверен, что это возможно.

Спасибо.

+0

Это может быть что-то вы пробовали, но вы экспериментировали с изменением Scalex вместо ширины? Я не уверен, что это приведет к тому, что стержень будет вести себя лучше –

ответ

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; 
Смежные вопросы