如何使用另一个 class 的 addChild() w/o 扩展?

How to use addChild() w/o extension from another class?

是否可以在没有来自另一个 Class 的 'extends' 的情况下使用 addChild() ? 很奇怪,我需要从另一个 类 扩展才能使用它……但也许是我对 as3 缺乏了解……

主要:

public class Main extends Sprite
{
    private var sprite:Sprite = new Sprite();

    public function Main()
    {
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);
        // entry point          

        var myVar:MyClass = new Myclass();
        addChild(myVar);
    }
}

我的Class:

public class MyClass
{
    private var sprite:Sprite = new Sprite();

    public function MyClass()
    {
        sprite.graphics.lineStyle(1, 0x990000, 1);
        sprite.graphics.drawRoundRect(5, 5, 500, 150, 10, 10);

        addChild(sprite);
    }
}

addChild 是将 DisplayObject 添加到 DisplayObjectContainer 的方法,所以是的,如果您想在屏幕上看到它,您必须扩展您的自定义 类

延伸阅读:http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7e3e.html http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObjectContainer.html

我看起来像你想这样做:

public class MyClass
{
    private var sprite:Sprite;

    public function MyClass(container:MovieClip)
    //                      ^^^^^^^^^ Take a reference to a container to add children to.
    {
        sprite = new Sprite()
        sprite.graphics.lineStyle(1, 0x990000, 1);
        sprite.graphics.drawRoundRect(5, 5, 500, 150, 10, 10);

        container.addChild(sprite);
        // ^^^^^^ Add internal sprite to the referenced container.
    }
}

您提供容器以添加子项的位置。

意味着您的 Main class 将简单地将对自身的引用传递给您的 MyClass 实例。

private function init(e:Event = null):void 
{
    removeEventListener(Event.ADDED_TO_STAGE, init);        

    var myVar:MyClass = new MyClass(this);
    //                              ^^^^ Simply pass the main class as the container.
}

另一种选择是简单地从 MyClass 公开 sprite 然后使用:

addChild(myVar.sprite);

在你的主要 class.

对您的问题的简单回答是:不,如果不扩展 DisplayObjectContainer 的子class,自定义 class 就不能添加 Child。方法 addChild() 及其相关方法定义在 DisplayObjectContainer 中,只有它的子classes 可以使用它们。

您经常看到在没有调用对象的情况下使用 addChild() 方法(例如:theobject.addChild()),但这只是因为隐含了关键字 "this"。实际上 addChild() 总是由 DisplayObjectContainer 实例调用。