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

How do I identify specific entity within a FlxGroup from FlxG.collide?

如何做到当子弹组中的一颗子弹与敌人组中的一个敌人相撞时,只有两个相互撞击的人会受到影响?

我试过(在游戏状态下):

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

但这唯一成功的事情就是杀死整个团队。我如何只杀死受影响的人?

您想传入通知回调:

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() 函数可让您将对象或组传递给任一参数,并告诉您这两者是否发生冲突。在两个对象的情况下,您可以直接使用对这两个对象进行操作的逻辑来跟进该测试。但是,如果其中一个对象是一组,您无法仅根据测试知道哪些对象发生了碰撞,因此您需要依靠您自己提供的回调来获取该特定信息。

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();
    }
);