如何从FlxG.collide中识别FlxGroup中的特定实体?

时间:2016-02-17 20:04:22

标签: haxe haxeflixel

如何做到这一点,当子弹组中的子弹与敌人的敌人发生碰撞时,只有两个撞击对方会受到影响?

我尝试过(在播放状态):

if (FlxG.collide(bullet, enemy)){
        bullet.kill();
        enemy.kill();
    }

但这个成功的唯一方法是杀死整个团队。我怎样才杀死受影响的人?

2 个答案:

答案 0 :(得分:1)

您想要传递通知回调:

https://github.com/HaxeFlixel/flixel/blob/24529ac96d4ad49a5f0c7e64799d0197cee9049e/flixel/FlxG.hx#L395

所以这就是你想要的东西:

FlxG.collide(bulletGroup, enemyGroup, collideBulletEnemy));

function collideBulletEnemy(bullet:FlxObject, enemy:FlxObject):Void
{
    bullet.kill();
    enemy.kill();
}

更多解释:

flixel中的collide()函数允许您将对象或组传递给任一参数,并告诉您这两件事是否发生冲突。在两个对象的情况下,您可以直接跟随该测试,逻辑操作这两个对象。但是,如果其中一个对象是一个群组,那么根据单独的测试,您根本不知道哪些事情发生了冲突,因此您需要依靠自己提供的回调来获取该特定信息。

答案 1 :(得分:1)

Haxeflixel API docs

collide(?ObjectOrGroup1:FlxBasic, ?ObjectOrGroup2:FlxBasic, ?NotifyCallback:Dynamic‑>Dynamic‑>Void):Bool

所以我认为你可以使用类似的东西:

FlxG.collide(
    groupBullets, 
    groupEnemies, 
    function (bullet:FlxObject, enemy:FlxObject):Void {
        enemy.kill();
        bullet.kill();
    }
);