将多个动画片段修改为一个

时间:2010-11-08 02:43:13

标签: flash actionscript-3 actionscript adobe

有没有办法在舞台上移动或缩放一堆动画片段,而不将它们放在另一个动画片段中?

Thanx:)

1 个答案:

答案 0 :(得分:0)

编辑:

如果您正在收听resize事件,可以使用一些属性,我假设您的stage.scaleMode属性设置为NO_SCALE ...

您可以通过将最大尺寸值设置为Capabilities.screenResolutionX和Capabilities.screenResolutionY来设置比率1,它将为您提供用户的最大屏幕尺寸。请注意,这些尺寸对应于全屏尺寸,例如未考虑浏览器工具栏。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/Capabilities.html

然后,您可以通过将当前舞台宽度/高度与最大设置进行比较来计算影片剪辑的当前比例。

      const MAX_WIDTH:int = Capabilities.screenResolutionX;
      const MAX_HEIGHT:int = Capabilities.screenResolutionY;

      //These values should be updated in your resize event listener
      //For a pure AS3 project, I usually use Javascript functions
      //to get a window dimensions
      var currentWidth;
      var currentHeight;
      var widthScale:Number = currentWidth / MAX_WIDTH; 
      var heightScale:Number = currentHeight / MAX_HEIGHT; 

最后,将stage.scaleMode属性设置为EXACT_FIT会不会更简单?

编辑结束

将您的MovieClip放入数组并循环通过数组进行修改,如果每个MovieClip需要进行特定修改,请创建一个将存储MovieClip的对象数组以及修改参数。

 var mc1:MovieClip = new MovieClip();
 var mc2:MovieClip = new MovieClip();
 //etc...
 var mcn:MovieClip = new MovieClip();

 // you could also use a Vector
 var mcs:Array = [mc1 , mc2 , .... , mcn];

 var scale:Number = .6;


 for( var i:int ; i < mcs.length ; ++i )
 {
        mcs[i].scaleX = widthScale
        mcs[i].scaleY = heightScale;
 }

如果您为MovieClip使用Class,您将创建一个特定的方法来修改它们,但您仍然需要通过MovieClip循环来设置修改

 var mc1:MovieClip = new Example();
 var mc2:MovieClip = new Example();
 //etc...

 public class Example extends MovieClip
 {
       public function modify(params:Object):void
       {
            this.scaleX = params.scaleX;
            this.scaleY = params.scaleY;

            //or for example
            TweenMax.to( this , params.delay , {scaleX:params.scaleX , 
                        scaleY:params.scaleY , ease:params.ease} );

       }
 }

 for( var i:int ; i < mcs.length ; ++i )
        mcs[i].modify({scaleX:.5 , scaleY:.6 , delay:1 , ease:Quad.easeOut});