如何在AS3中引用对象?

时间:2011-09-09 16:13:07

标签: actionscript-3

我已经学会了一种方法,但我希望提高自己的知识水平。为简单起见,我不打算在下面的代码中使用import。

1

public class Main
{
public function Main()
{
new MyCustomObject(stage);
}
}

2

public class MyCustomObject
{
public var referenceStage:Stage = new Stage();

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

我已经学会了通过互联网阅读教程,但我想知道在哪里可以找到更多关于如何在AS3中引用对象的示例。对于将来的代码,我想添加hitTest等。

谢谢!

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

如果你绝对想通过一个参数将一个阶段引用传递给一个构造函数,你可以这样做(尽管你没有做任何事情)去掉新的Stage()调用。

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

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

所以而不是

public class MyObject extends Sprite {
  public function MyObject():void{
    this.x = this.stage.stageWidth/2;
  }
}
你会用这样的东西

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

答案 2 :(得分:0)

在您的示例中,您不需要在CustomObject

中调用新的Stage()
public var referenceStage:Stage;

就够了

点击功能可以在http://troygilbert.com/2007/06/pixel-perfect-collision-detection-in-actionscript3/

找到

可能的解决方案是:

  • 您也可以传递主对象并在自定义对象的主对象中调用函数,而不是传递舞台对象
  • 在MainObject中维护一个您想要进行碰撞测试的数组。
  • 使用一个函数实现一个接口(扩展一个对象),该函数再次对MainObject中的数组执行命中测试(例如,触发了EntreFrame事件)
  • 自定义事件是与主要对象松散通信的解决方案

在构造函数中传递对象的引用是一种经典的OOP模式