如何使用addChild()从另一个类扩展?

时间:2015-11-19 07:31:00

标签: class actionscript-3 oop flash flashdevelop

是否可以使用addChild()而不使用' extends'来自另一个班级? 奇怪的是,我需要从另一个类扩展才能使用它...但也许是我对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);
    }
}

MyClass的:

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);
    }
}

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

我看起来你正试图这样做:

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类只会将对自身的引用传递给您的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.
}

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

addChild(myVar.sprite);

在您的主课程中。

答案 2 :(得分:0)

您的问题的简单答案是:不,自定义类无法在不扩展DisplayObjectContainer的子类的情况下添加。方法addChild()及其相关方法在DisplayObjectContainer中定义,只有它的子类可以使用它们。

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