我正在尝试将一个类的实例传递给另一个类。遇到困难

时间:2010-02-16 22:08:07

标签: actionscript-3

所以我目前正在处理两个类,一个激光类,(对应一个动画片段)和一个敌人类。敌人类与多个敌人的动画片段相关联。当它被创建时,它将寻找与激光类的实例化的碰撞。这是我遇到麻烦的地方。我想解决这个问题,以便在实例化Enemy类时,可以将Laser类传递给它以进行所述碰撞检测。我似乎找不到办法做到这一点。

问题是Laser类需要Enemy类的特定实例化,以便将其自身传入。因为我正在同时处理多个Enemy类,所以激光类可以将自己传递到正确的类中是至关重要的。

如果这一切都没有意义,只需评论,我会尝试澄清一些。

3 个答案:

答案 0 :(得分:1)

理想情况下,您希望在游戏中使用一个大循环来检测碰撞。因此,也许在创建激光束时,将其推入阵列并让敌人也在另一个阵列/

然后在碰撞循环中你会得到:

//call this function on every ENTER_FRAME
public function updateCollisions():void

//TODO other collisions

   for (var i:int = 0; i < laserArray.length;i++)
   {
         for (var k:int = 0; k < enemiesArray.length;k++)
         {
              if (laser[i].hitTestObject(enemiesArray[k]))
              {
               enemiesArray[k].health-=10;
              }

         }

    }
}

当然,在处理碰撞时,有很多事情需要考虑,每个像素点击测试,隧道,空间分区,但这些可以留待以后(并且仅在需要时)。

答案 1 :(得分:1)

如果我理解问题是正确的,你有两个不同的类'激光'(L)和敌人(E),你想在相应的'E'实例中传递'L'的实例。正如你所说的那样

'问题是Laser类需要Enemy类的特定实例化,以便将其自身传入。而且因为我正在同时处理多个Enemy课程,所以激光课程可以将自己传递给正确的课程至关重要。“

这是否意味着L是可以访问实例化Enemy对象数组的主类,现在您希望L在这些Enemy对象中以某种方式可见/可访问。对于这种情况,您可以简单地使用可以通过setter函数实例化的E类型的变量。例如,

=============================================== ===============================

//主要激光类

function process():void

{

var myEnemy:E = getDesiredEnemyInstance();

myEnemy.laser = this;

}

//在E级内部

//一些代码 private var _laser:Laser;

//一些代码

公共功能设置激光(l:激光):无效

{

this._laser = l;

}

=============================================== ==============================

在实现此可访问性之后,您始终可以按照antpaw的建议在这些类中使用事件处理。您可能需要在此处使用“元数据”标记。我希望有所帮助。如果我仍然不清楚问题的定义,请纠正我。

愿望, Ashine

答案 2 :(得分:0)

当被激光击中时,敌人应该派遣一个自定义事件。然后你可以设置你喜欢监听事件的eventlistener(比如这一个enemyEvent.DAMAGE_TAKEN),并触发一个处理敌人伤害的函数。这将为你节省通过激光课程进入敌人课程的有线步骤,这对我没有任何影响。