3

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

错误 #1034:类型强制失败:无法将 flixel::FlxSprite@51e1b69 转换为 Player。

    ...
    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,因为我希望播放器有多个与之关联的精灵。

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

如果我替换player:Playerplayer:FlxSprite没有错误,那么我将无法再访问Player类函数。

4

1 回答 1

2

我知道这可能有点晚了,但是您可以尝试一些事情:

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

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

如何解释......如果你有一个FlxTypedGroup<Player>并且你的Player对象扩展FlxTypedGroup<PlayerPart>(如果PlayerPart扩展FlxSprite或其他东西),当你这样做时FlxG.overlap(weapons, players, onPickup),重叠不会传递Player对象,它会传递PlayerPart重叠的对象 - 事实上,它会调用与武器重叠的onPickup每个PlayerPart物体都一次 - 可能是同一个 - 这个update

如果你能弄清楚,你可以利用这种行为来发挥你的优势 - 让你的玩家组包含几个 PlayerPart,但将它们全部设置为allowCollisions = NONE除了一个将是你的 hitbox 等之外。

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

于 2015-05-18T15:26:51.123 回答