2011-09-09 31 views
1

我学会了一种方法来做到这一点,但我想提高自己的知识水平。为了简单起见,我不会使用导入,也不会在下面的代码中进行扩展。如何引用AS3中的对象?

public class Main 
{ 
public function Main() 
{ 
new MyCustomObject(stage); 
} 
} 
public class MyCustomObject 
{ 
public var referenceStage:Stage = new Stage(); 

public function MyCustomObject(xxx:Stage) 
{ 
this.referenceStage = xxx; 
referenceStage.addChild(this); 
} 
} 

我已经学会了阅读在互联网的教程,但我想知道在哪里可以找到如何在AS3参考对象更多的样品。对于未来的代码,我想添加hitTest等。

谢谢!

回答

0

如果你确实想通过一个参数传递给构造一个阶段的参考,你可以做到这一点你如何布置(尽管摆脱新的Stage()调用,这将不会做任何事情)。

说,.stage是一个属性可用于显示列表中的所有显示对象(意思是:已通过addChild或addChildAt添加)。

您可能会遇到该错误,试图在将对象的.stage属性添加到显示列表之前引用该对象的.stage属性。这是一个常见的错误,并且可通过等待,直到它已被添加,通常使用addEventListener(Event.ADDED_TO_STAGE引用.stage财产处理...

所以不是

public class MyObject extends Sprite { 
    public function MyObject():void{ 
    this.x = this.stage.stageWidth/2; 
    } 
} 

你” d使用这样的事情

public class MyObject extends Sprite { 
    public function MyObject():void{ 
    this.addEventListener(Event.ADDED_TO_STAGE, this.addedHandler, false, 0, true); 
    } 
    private function addedHandler(e:Event):void{ 
    this.x = this.stage.stageWidth/2; 
    } 
} 

HTH

0

在你的榜样,你不需要做你的CustomObject调用新的阶段()

public var referenceStage:Stage; 

足够

击打功能可以在这里找到http://troygilbert.com/2007/06/pixel-perfect-collision-detection-in-actionscript3/

可能的解决方案是:

  • 不是传递阶段的对象,你也可以通过主对象并调用自定义对象的主对象中的函数
  • 在MainObject中维护一个数组,用于执行碰撞测试。
  • 使用一个函数实现一个接口(扩展一个对象),这个函数在主对象中再次进行命中测试(例如去EntreFrame事件被触发)
  • 自定义事件是与主对象松散地通信的解决方案

在构造函数传递一个参考的对象是一个典型的面向对象编程模式