2011-08-19 45 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祝你好运!