Actionscript 3 AS3:如何在容器中添加子对象?
我现在几个小时都无法解决这个问题;(.我想在容器中添加一个子容器。这是我迄今为止所做的。所有问题都在类创建者中。此行par2.addChild(ship);//有效,但此行par2.containerSDv.addChild(ship);//错误:1119 谢谢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:
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;
}
}