Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 两个不同类中两个数组中的对象之间的hitTestObject_Actionscript 3 - Fatal编程技术网

Actionscript 3 两个不同类中两个数组中的对象之间的hitTestObject

Actionscript 3 两个不同类中两个数组中的对象之间的hitTestObject,actionscript-3,Actionscript 3,在我的主要职业中,我有一组敌人的物体,在我的玩家职业中,我有一组子弹物体。在这其中的某个地方,我需要一个方法来测试任何玩家子弹和敌人之间的碰撞,当检测到碰撞时,调用子弹的destroyBullet()方法和敌人的destroyBullet()方法 如果两个数组都在同一个类中,我可能会想出如何实现这一点,但我很困惑。我认为没有理由不在主类中保留您的子弹数组,但如果您想按现有方式执行此操作,则需要对Player.bullets进行公共访问 这应该从你的主课开始。您需要将其放入在游戏循环中运行的che

在我的主要职业中,我有一组敌人的物体,在我的玩家职业中,我有一组子弹物体。在这其中的某个地方,我需要一个方法来测试任何玩家子弹和敌人之间的碰撞,当检测到碰撞时,调用子弹的destroyBullet()方法和敌人的destroyBullet()方法


如果两个数组都在同一个类中,我可能会想出如何实现这一点,但我很困惑。

我认为没有理由不在主类中保留您的子弹数组,但如果您想按现有方式执行此操作,则需要对Player.bullets进行公共访问

这应该从你的主课开始。您需要将其放入在游戏循环中运行的checkCollisions函数中

//loop through bullets first, because if no bullets are fired, no point in checking
for each(var bullet:Bullet in player.bullets) {
  for each(var enemy:Enemy in enemies) {
    if(bullet.hitTestObect(enemy)) {
      bullet.destroyBullet();
      enemy.destroyEnemy();
    }
  }
}

记住,摧毁一颗子弹或敌人所涉及的不仅仅是移除精灵和清理。您还需要拼接存储每个对象的阵列。

谢谢您的帮助。在大多数情况下,我的一切都在运转,但我遇到了一个问题,我只是刚刚弄明白为什么会发生这种情况。我对游戏做了一些修改,使它不再只是在一颗子弹与敌人相撞后摧毁敌人,它现在有200点生命值,并且每一颗子弹击中敌人,它就会减少1点生命值。唯一的问题是,hitTestObject似乎只有在子弹第一次与敌人相撞时才会运行,因此在发生这种情况后,生命值保持在199,并且在第一颗子弹穿过敌人后,每颗子弹的生命值都会保持在199,而不是删除自己。因为这是一个游戏,可能会经常运行,在这里,您应该做两件事:1)从数组切换到向量(快得多),2)丢失每个的
,并使用标准的
for
循环,这同样快得多。请参阅有关环路速度的信息。这将使你的循环时间减少近66%。不管我最后的评论是什么,我刚刚意识到我在每一次命中测试中都会让它拼接敌人和子弹。哎哟。@Apocalyptic0n3在那篇文章中直接指出,10.1性能更新的速度是2.5倍,所以我想这取决于你的目标玩家,但我同意使用Vector@Helto这实际上是在另一篇与评论相关的文章中,因此我从未见过它。不管怎样,知道这一点很好。我总是避免使用for-each循环,因为它们比标准for循环慢很多。谢谢你指出这一点。