在动画片段注册点问题上加载图像

时间:2011-08-19 22:19:44

标签: flash actionscript-3

要将图像加载到动画片段,mc的注册点必须在左上角。有没有办法在整个动画片段上加载图像,当它的注册点不在左上角时。换句话说,设置从动画片段开始放置图像的位置

2 个答案:

答案 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.