在as3 AIR Android中缩放和翻译

时间:2013-11-27 11:52:50

标签: actionscript-3 flash zoom translate

我正在使用Adobe Flash cs6和actionscript3开发一个Android应用程序。我在舞台上的不同位置有多个moviclips。现在我需要添加一个缩放功能,将所有动画片段缩放为一个动画片段。我无法将所有动画片段组合成一个动画片段。我的缩放功能有效,但它不会将动画片段转换为新位置。 (意思是他们只放大原来的位置)我怎样才能做到这一点?以下是我的缩放代码:

/* ZOOM FEATURE */
Multitouch.inputMode = MultitouchInputMode.GESTURE;

zoomer.addEventListener(TransformGestureEvent.GESTURE_ZOOM , onZoom); 
function onZoom (e:TransformGestureEvent):void{
mc1.scaleX *= (e.scaleX+e.scaleY)/2; 
mc1.scaleY *= (e.scaleX+e.scaleY)/2; 

mc2.scaleX *= (e.scaleX+e.scaleY)/2; 
mc2.scaleY *= (e.scaleX+e.scaleY)/2;

mc3.scaleX *= (e.scaleX+e.scaleY)/2; 
mc3.scaleY *= (e.scaleX+e.scaleY)/2;

}  

1 个答案:

答案 0 :(得分:0)

不是我编写的最干净的代码,但它应该可以解决问题。 scaleInPlace()接受4个参数,2个必需,2个可选:

  • obj:您要缩放的显示对象
  • scaleFactor:就像听起来一样,你想要它有多大/多小?
  • fromX:您想要缩放的X坐标。左,中,右?如果省略,则从编译阶段大小的中间开始操作。
  • fromY:与上一个相同,但顶部,中间,底部。

这将保留您的DisplayList层次结构,同时允许您扩展到您心中的愿望。如果你有很多要扩展的对象,我可能首先将它们全部放到container,然后运行缩放和重新定位操作。虽然它有效,但这就是我认为它不是“最干净”解决方案的原因。在我自己的课程中,我编写了一个纯粹的数学解决方案,不包括添加/删除DisplayObjects,但它在我自己的课程中相当紧密,我无法在这里将它拉出来并让它工作。< / p>

干杯!


// Let's scale myObject to 50% of its original size.
scaleInPlace(myObject, 0.5);

function scaleInPlace(obj:DisplayObject, scaleFactor:Number, fromX:Number = NaN, fromY:Number = NaN):void {
    // If no coordinates from where to scale the image are provided, start at the middle of the screen
    if (isNaN(fromX)) { fromX = loaderInfo.width/2; }
    if (isNaN(fromY)) { fromY = loaderInfo.height/2; }

    var father:DisplayObjectContainer = obj.parent;
    var rect:Rectangle; // Coordinates for tracking our object
    var index:int = getChildIndex(obj) // Where this object should go when we put it back

    // Create the container
    var container:Sprite = new Sprite();
    father.addChild(container);

    // Place the origin of the scale operation
    container.x = fromX;
    container.y = fromY;

    // Get the coordinates of our object relative to our container
    rect = obj.getRect(container);

    // Parent and move into place
    container.addChild(obj);
    obj.x = rect.x;
    obj.y = rect.y;

    // Scale
    container.scaleX = container.scaleY = scaleFactor;

    // Get the coordinates and size of our scaled object relative to our father
    rect = obj.getRect(father);

    // Cleanup the display list
    father.addChildAt(obj, index);
    father.removeChild(container)

    // Apply the new coordinates and size
    obj.x = rect.x;
    obj.y = rect.y;
    obj.width = rect.width;
    obj.height = rect.height;
}