所以我目前正在处理两个类,一个激光类,(对应一个动画片段)和一个敌人类。敌人类与多个敌人的动画片段相关联。当它被创建时,它将寻找与激光类的实例化的碰撞。这是我遇到麻烦的地方。我想解决这个问题,以便在实例化Enemy类时,可以将Laser类传递给它以进行所述碰撞检测。我似乎找不到办法做到这一点。
问题是Laser类需要Enemy类的特定实例化,以便将其自身传入。因为我正在同时处理多个Enemy类,所以激光类可以将自己传递到正确的类中是至关重要的。
如果这一切都没有意义,只需评论,我会尝试澄清一些。
答案 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)