我正在使用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;
}
答案 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;
}