당신은 컨테이너 클래스를 확장하고 addChild()
, addChildAt()
, removeChild()
및 removeChildAt()
기능을 재정 의하여 모든 MC의 특정 유형의 목록을 유지할 수 있습니다. 이 클래스, 아이가 추가 될 때마다 사용
는
public class MySprite extends Sprite {
public var ownClasses:Vector.<MyOwnClass> = new Vector.<MyOwnClass>();
override public function addChild(child:DisplayObject):DisplayObject {
addOwnClass(child as MyOwnClass);
return super.addChild(child);
}
override public function addChildAt(child:DisplayObject, index:int):DisplayObject {
addOwnClass(child as MyOwnClass);
return super.addChildAt(child, index);
}
private function addOwnClass(child:MyOwnClass):void {
if (child) ownClasses.push(child);
}
override public function removeChild(child:DisplayObject):DisplayObject {
removeOwnClass(child as MyOwnClass);
return super.removeChild(child);
}
override public function removeChildAt(index:int):DisplayObject {
removeOwnClass(getChildAt(index) as MyOwnClass);
return super.removeChildAt(index);
}
private function removeOwnClass(child:MyOwnClass):void {
if (child) {
var i:int = ownClasses.indexOf(child);
if (i != -1) ownClasses.splice(i, 1);
}
}
}
, 당신은이 MyOwnClass
을인지 확인하고 있는지 당신은 ownClasses
목록에 추가합니다. 자식 제거와 비슷합니다.
이제 MC를 반복하지 않고도 필요할 때 목록에 액세스 할 수 있습니다.
public class Main extends MySprite
{
public function Main()
{
addChild(new Sprite());
addChild(new MyOwnClass());
trace(ownClasses);
}
}
이 뜻을 출력
[object MyOwnClass]
내가 올바른 클래스인지 다른 방법으로 생각할 수는 있지만 루프를 피할 수는 없다고 생각합니다. 아마도 당신이 컨테이너의'addChild()'를 오버라이드한다면, 거기에서 체크를 할 수있을 것입니다. – RIAstar
@RIAstar 무시는 요소를 찾았을 때 내가 아래에서 말한 내용을 확인해야하기 때문에 원하는 내용이 아닙니다. 또는 당신이 말한 것을 이해하지 못했습니다 (저는 이미 AS3에서 매우 초보자입니다). –