要将图像加载到动画片段,mc的注册点必须在左上角。有没有办法在整个动画片段上加载图像,当它的注册点不在左上角时。换句话说,设置从动画片段开始放置图像的位置
答案 0 :(得分: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);
你也可以做很多事情。如果你想要真正想象,你可以制作一个自定义的类来扩展{em}覆盖方法DisplayObjectContainer
的{{1}}检查希望addChild
为现有的孩子提供parent
X
最远离左边的孩子的坐标。
自定义类看起来像:
Y
将上面的示例称为“高级”,但扩展类和多态对于编码员来说是非常有价值的 OOP 信息,如果你'已经不熟悉他们了。此外,我的类示例扩展了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);
}
}
}
,但您可以扩展任何Sprite
的项目,例如。 DisplayObjectContainer
等祝你好运!
答案 1 :(得分: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.