2011-08-19 54 views
0

要將影像加載到影片剪輯上,MC的註冊點必須位於左上方。是否有一種方法可以在整個動畫片段上加載圖像,當它的註冊點不是左上角時。換句話說,設置從哪裏開始將圖像放入參考電影剪輯加載影像剪輯註冊點問題上的圖像

回答

1

是的,你可以。

其真正簡單的事情是,在將對象添加到MovieClip後,您可以通過使用其x和y屬性將其放置在每個位置。

var mc:MovieClip = new MovieClip(); 
addChild(mc); 

var mc_child:MovieClip = new MovieClip(); 
mc.addChild(mc_child); 

mc_child.x = //whatever you like. 
mc_child.y = //whatever you like. 
2

當然可以。

邊注:任何孩子添加到DisplayObject地方是在剪輯的註冊點自己的註冊點除非另有規定(聽起來像是你知道這口井)。 「覆蓋」這種行爲有點棘手,但有一些變通辦法:

import flash.display.Sprite; 

// assume parentClip already has a single image inside of it at -100,-100 

var newClip:Sprite = new Sprite(); 

// add a peachy-red box to the child (to give us something to look at) 
newClip.graphics.beginFill(0xff9999); 
newClip.graphics.drawRect(0, 0, 200, 200); 
newClip.graphics.endFill(); 

// Essentially, tell the newClip to show up wherever the pre-existing child is 
var curChild:DisplayObject parentClip.getChildAt(0) 
newClip.x = curChild.x; 
newClip.y = curChild.y; 

parentClip.addChild(newClip); 

有很多你可以用這個來做。如果你想獲得真正看中你可以做一個自定義的擴展一個DisplayObjectContainer那會覆蓋方法addChild的檢查要parent現有的兒童和獲取是最最遠的孩子XY COORDS頂部|離開。

一個自定義類看起來是這樣的:

package { 
    import flash.display.DisplayObject; 
    import flash.display.Sprite; 

    public class MySuperContainer extends Sprite { 
     public function MySuperContainer() { 
      super(); 
     } 

     override public function addChild(child:DisplayObject):DisplayObject { 
      var to_x:Number = 0; 
      var to_y:Number = 0; 

      for(var i:int = 0; i < this.numChildren; ++i) { 
       var c:DisplayObject = this.getChildAt(i); 
       if(c.x < to_x) to_x = c.x; 
       if(c.y < to_y) to_y = c.y; 
      } 

      child.x = to_x; 
      child.y = to_y; 

      return super.addChild(child); 
     } 
    } 
} 

授予上面的例子有點更「先進」,但延長類和多態性是非常有價值的的程序員OOP的信息,如果您他們已經不熟悉它們了。此外,我的類示例擴展了Sprite,但您可以擴展任何例如DisplayObjectContainer的項目。 MovieClip祝你好運!