Actionscript 3 AS3:如何在容器中添加子对象?

Actionscript 3 AS3:如何在容器中添加子对象?,actionscript-3,containers,addchild,Actionscript 3,Containers,Addchild,我现在几个小时都无法解决这个问题;(.我想在容器中添加一个子容器。这是我迄今为止所做的。所有问题都在类创建者中。此行par2.addChild(ship);//有效,但此行par2.containerSDv.addChild(ship);//错误:1119 谢谢 public class Main extends MovieClip { private var containerSD:Container = new Container; private var ship:

我现在几个小时都无法解决这个问题;(.我想在容器中添加一个子容器。这是我迄今为止所做的。所有问题都在类创建者中。此行par2.addChild(ship);//有效,但此行par2.containerSDv.addChild(ship);//错误:1119

谢谢

    public class Main extends MovieClip
{
    private var containerSD:Container = new Container;
    private var ship:Ship2;

    public function Main()
    {
        // constructor code
        stage.addChild(containerSD);
        //ship = new Ship2;
        //containerSD.addChild(ship);

    }
}


.

我认为您可能需要后退一步,重新评估您的总体设计和目标

考虑这种方法:

public class Main extends MovieClip
{
    private var container:Sprite = new Sprite;
    private var newShipButton:NewShipButton = new NewShipButton;
    private var creator:Creator;

    public function Main()
    {
        creator = new Creator;
        addChild(container);
        addChild(newShipButton);

        newShipButton.addEventListener(MouseEvent.CLICK, newShipButtonHandler);

    }

    private function newShipButtonHandler(e:MouseEvent):void
    {
        // shipStyle would be a MovieClip of the artwork for a given ship.
        var ship:Ship = creator.makeShip(shipStyle, speed, power, container);
        ship.x = Math.random() * 200;
        ship.y = Math.random() * 200;
    }

}
下面是Creator类的一个示例

public class Creator
{

    public function Creator()
    {
        // constructor code
    }

    public function makeShip(style:MovieClip, speed:Number, power:Number, container:MovieClip):Ship
    {
        var ship:Ship = new Ship(style);
        ship.speed = speed;
        ship.power = power;
        container.addChild(ship);
        return ship;
    }

}
我做了一些假设,比如你有一个Ship类将扩展一个MovieClip/Sprite并拥有artwork,你的NewShipButton类将扩展SimpleButton并拥有artwork

如果这不符合您的需要,请解释您试图做的不符合此极其简单的设计的事情


我看到你的许多帖子似乎让事情变得比它们需要的困难得多。也许这是一个很好的理由,但如果是这样,请解释为什么上述方法不适用于你的目的。

如果我给容器命名并取消选中“设置”中的“严格模式”并且我的代码有效。我发现非常有用的文章关于DisplayObjectContainer


您好Prototypic,非常感谢您的回答。我的游戏每时每刻都在变化。我在制作游戏时正在训练我的技能和学习。您上面的方法是可以的,但我需要使用我的Creator类,它的功能是在舞台上显示传递的对象。我希望能够将任何movieClip对象传递给Creator类d它将向传递的对象添加一些属性(速度、大小)。我不完全确定,但这应该是合成类型的设计。然而,一切都很好,我可以在舞台上添加任何传递的对象,但不能添加到容器中。为什么你不能调用creator类,为你提供一艘具有你想要的属性的船?我已经更新了我的答案。它现在有一个creator类。你可以看到我给我的东西你甚至可以在Creator类中移动速度/功率的定义,但这只是我正在谈论的一个例子。在prototype.in给我发一封电子邮件。training@gmail.com如果你有gmail,我们可以聊天的话,我可以帮助你比现在快得多。谢谢原型,现在一切都清楚了只有一件事:你添加主类中的子类,我正试图从Creator类中执行此操作。我这样做是错误的吗?您的方法的正负是什么?如果我将所有内容保持在上面的状态,并且不接触严格模式(勾选)我收到错误1061:1061:通过引用静态类型flash调用可能未定义的addChild方法。display:displayObjects因此,基本上我认为编译器不知道我的容器是动态对象,我不知道如何告诉它。
public class Main extends MovieClip
{
    private var container:Sprite = new Sprite;
    private var newShipButton:NewShipButton = new NewShipButton;
    private var creator:Creator;

    public function Main()
    {
        creator = new Creator;
        addChild(container);
        addChild(newShipButton);

        newShipButton.addEventListener(MouseEvent.CLICK, newShipButtonHandler);

    }

    private function newShipButtonHandler(e:MouseEvent):void
    {
        // shipStyle would be a MovieClip of the artwork for a given ship.
        var ship:Ship = creator.makeShip(shipStyle, speed, power, container);
        ship.x = Math.random() * 200;
        ship.y = Math.random() * 200;
    }

}
public class Creator
{

    public function Creator()
    {
        // constructor code
    }

    public function makeShip(style:MovieClip, speed:Number, power:Number, container:MovieClip):Ship
    {
        var ship:Ship = new Ship(style);
        ship.speed = speed;
        ship.power = power;
        container.addChild(ship);
        return ship;
    }

}
    public class Creator extends MovieClip
{
    private var ship:MovieClip;
    private var containerSDv:Container = new Container;

    public function Creator()
    {
        // constructor code
    }

    public function onCreator(par1:MovieClip, par2:Stage)
    {
        ship = par1;
        //par2.addChild(ship); //works
        par2.getChildByName("contain").addChild(ship); //error:1119
        ship.x = Math.random() * 200;
        ship.y = Math.random() * 200;
    }

}
    public class Main extends MovieClip
{
    private var containerSD:Container = new Container;
    private var ship:Ship2;

    public function Main()
    {
        // constructor code
        stage.addChild(containerSD).name = "contain";
        containerSD.x = 0;
        containerSD.y = 0;


    }
}