如何使用另一个 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 实例调用。
是否可以在没有来自另一个 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 实例调用。