【问题标题】:Error with hitTestObjecthitTestObject 出错
【发布时间】:2014-04-14 17:15:29
【问题描述】:

我正在尝试制作一款类似于世界上最难的游戏的游戏,但我在使用 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)

        }

    }   

}
}

我不知道在问号里填什么。当我输入播放器的实例名称时,它说它是未定义的。

【问题讨论】:

    标签: actionscript-3 flash hittest


    【解决方案1】:

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

    您应该将命中测试从enemys 类移到您可以访问enemys 和玩家实例的地方。一个很好的地方是某种 GameEngine 类。

    【讨论】:

      【解决方案2】:

      玩家的实例名怎么写?是否通过构造函数传递实例?

      从你的主类中,你需要将你的玩家的一个实例发送到敌人类。 (顺便说一下,敌人的复数形式是敌人)

      public class Enemies extends Sprite{
      
         private var player:PlayerClass;
      
      public function Enemies(p:PlayerClass) {
      
         stage.addEventListener(Event.ENTER_FRAME, hittrue);
         player = p;
      }
      

      那么你可以把'player'放在哪里?是。在你的主课中,你会有类似的东西:

      var enemies:Enemies = new Enemies(player);
      

      我将 MovieClip 更改为 Sprite。这是您的选择,但有时使用 Sprites 会更好,因为它会比 MovieClip 更快。您可能需要调查它们,特别是如果您要在舞台上同时有多个敌人。

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

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

      所以在你的主课的 ENTER_FRAME 事件中你会调用:

      enemies.hittrue();
      

      而不是在你的敌人类中有一个 EnterFrame 事件。这也将使暂停游戏变得更加容易。

      正如另一个答案所暗示的那样。您的碰撞检测确实应该在您的 Enemies Class 之外。但是,这就是您将玩家的引用传递给另一个类的方式。

      【讨论】:

      • 精灵做什么?对不起,我是新人
      • 精灵是一个用于显示图形的类。它没有像 MovieClip 那样的帧。它比电影剪辑更轻。为了创建动画,您将使用精灵表。这是精灵的文档help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/…
      • 那么在我定义了变量敌人之后,我如何调用它进入舞台。另外,这是否意味着 player 变量将转移到该代码。另外,如果我已经在主代码中定义了播放器怎么办?
      • 你怎么叫它上台呢? - 这对我来说没有意义。这并不意味着它会转移到那个代码,只是意味着你有一个对 player 变量的引用。这就是重点,你在主代码中定义了播放器,所以你不能从 Enemies Class 访问它(你没有在那里定义它),所以你传递了一个播放器的引用,所以你可以访问它。
      • 通过在enemy中定义私有变量,我传递了一个引用?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      相关资源
      最近更新 更多