是否可以使用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);
}
}
答案 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实例调用。