我希望玩家使用下面的代码在我的游戏中拾取对象,但我得到:


    ...
    FlxG.overlap(weapons, players, onPickup)
}

private function onPickup(wep:Weapon, player:Player):Void
{
    //access player function
}

我已经如下初始化了玩家和武器,并添加到组中
players= new FlxTypedGroup<Player>();
weapons= new FlxTypedGroup<Weapon>();
Weapon 扩展 FlxSpritePlayer 扩展 FlxTypedGroup<FlxSprite>

我使用 FlxTypedGroup 是因为我希望玩家有多个与之关联的 Sprite 。

请帮忙,以便我可以访问播放器类变量!

如果我用 player:Player 替换 player:FlxSprite 没有错误,但是我无法再访问 Player 类函数。

最佳答案

我知道这可能有点晚了,但您可以尝试以下几点:

您可以尝试将 FlxSpriteGroup 用于 Player 而不是 FlxTypedGroup 。可能需要一些工作才能使其按您想要的方式工作。

此外,它给您一个错误的原因是因为 overlapcollide 将(默认情况下)深入您的组,直到涉及实际对象...

如何解释...如果您有一个 FlxTypedGroup<Player> 并且您的 Player 对象扩展了 FlxTypedGroup<PlayerPart>(如果 PlayerPart 扩展了 FlxSprite 或其他内容),那么当您执行 FlxG.overlap(weapons, players, onPickup) 时,重叠不会传递 Player 对象,它将传递重叠的 PlayerPart 对象- 事实上,它会为每个与武器重叠的 onPickup 对象调用 PlayerPart 一次 - 可能是同一个 - 这个 update

如果您能弄清楚,您可以利用此行为来发挥自己的优势 - 让您的 Player 组包含多个 PlayerParts,但将所有这些设置为 allowCollisions = NONE,除了一个将成为您的碰撞箱等。

你可以做很多事情,只是弄清楚细节。祝你好运!

关于haxe - 无法使用 FlxG.overlap 传入 FlxTypedGroup 类参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27479280/

10-16 10:27