hitTestObject出错

时间:2014-04-14 17:15:29

标签: actionscript-3 flash hittest

我正在尝试制作类似于世界上最难的游戏的游戏,但我遇到了hitTestObject块的问题。这是我对敌人mi的代码:

package  {

  import flash.display.MovieClip;
  import flash.events.Event;


public class enemys extends MovieClip {

public function enemys() {

    stage.addEventListener(Event.ENTER_FRAME, hittrue)

}

public function hittrue(event:Event) {

    if (this.hitTestObject(?)) {

        while (numChildren > 0) {

            removeChildAt(0)
            }

        gotoAndStop(2)

        }

    }   

}
}

我不知道该把什么问题放进去。当我把我的播放器的实例名称,它说它是未定义的。

2 个答案:

答案 0 :(得分:1)

您收到错误,因为enemys(原文如此)似乎无法访问任何类型的播放器实例。

您应该将命中测试从enemys类移到您可以访问enemys和播放器实例的某个位置。一个好的地方就是某种GameEngine类。

答案 1 :(得分:0)

如何设置播放器的实例名称?你通过构造函数传递实例吗?

从您的主要课程中,您需要将您的播放器实例发送到enemys课程。 (顺便说一句,敌人的复数就是敌人)

public class Enemies extends Sprite{

   private var player:PlayerClass;

public function Enemies(p:PlayerClass) {

   stage.addEventListener(Event.ENTER_FRAME, hittrue);
   player = p;
}

然后你就可以把''播放器'在哪里?是。在你的主要课程中,你会有类似的东西:

var enemies:Enemies = new Enemies(player);

我将MovieClip更改为Sprite。这是你的选择,但有时候使用Sprit会更好,因为它会比MovieClip更快。你可能想要研究它们,特别是如果你一次要在舞台上有多个敌人的话。

另一件事是设计你的ENTER_FRAME事件。

您不希望在多个类中进行多个Enter_Frame事件。一个好的设计是在你的主要课程中有一个。然后从需要时钟周期的类中,在主类的ENTER_FRAME事件中调用这些对象的更新方法。

所以在你的主课程的ENTER_FRAME活动中你会打电话:

enemies.hittrue();

而不是在你的敌人类中有一个EnterFrame事件。这也可以让您更轻松地暂停游戏。

正如另一个答案所暗示的那样。你的碰撞检测应该在你的敌人类之外。但是,这就是你将玩家的引用传递给另一个类的方法。