Конечно.
Примечание: Любой ребенок , добавленный к 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
на наличиеchildren и получить X
Y
координаты дочернего элемента, который является самым дальним из верхних | левых.
Пользовательский класс будет выглядеть примерно так:
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);
}
}
}
Допустим, приведенный выше пример aнемного более "продвинутый", но расширение классов и полиморфизм очень ценная OOP информация для кодировщиков, если вы еще не знакомы с ними.Кроме того, мой пример класса расширяет Sprite
, но вы можете расширить любой элемент, например DisplayObjectContainer
.MovieClip
и т. Д. Удачи!