1

我正在使用 AndEngine 开发拳击游戏。我有两个动画精灵 A 和 B,它们代表两个拳击手。我想区分他们的健康状况。如果精灵 A 用手击中 B,则 B 的生命值会降低。如何区分两个精灵之间的这种碰撞?

4

1 回答 1

0

我想你要问的是,当一个拳击手精灵与另一个拳击手精灵发生碰撞时,你如何确定哪个拳击手应该受到伤害。基本答案是您需要收集和利用更多信息,而不仅仅是是否发生碰撞。我的建议是,您不要将出拳视为整个精灵之间的碰撞,而是计算出代表拳头的形状,并在出拳期间的关键时刻检查它是否与其他拳击手发生碰撞。例如:

冲床

当拳击手出拳时,您想要确定动画中接触“很重要”的关键时间段(大概是在出拳的完全延伸时,并且在出拳之前和之后都有一点延伸。)在这段时间时间,将拳击手上的一些布尔值设置为 true,而在其他时候,将其设置为 false。如果它是真的,在你的拳击手更新中,你应该计算一个代表“拳头”的形状。您不必渲染此形状(尽管这样做可能有助于调试和测试),您只需计算其位置,以便检查“拳头”是否与其他拳击手发生碰撞。拳头撞击区域在概念上应该与拳击手进行出拳相关联,因此您无需检查拳击手和他自己的拳头之间的碰撞。您可能希望将影响形状作为拳击手实体中的一个字段。因此,如果拳头在此期间与另一个实体(即另一个拳击手)发生碰撞,则会对另一个拳击手施加一些健康伤害。

您在下面的评论中询问了一些额外的实施细节。以下代码不是完整的实现,但应该可以帮助您入门。

public class BoxerSprite extends AnimatedSprite {

    boolean     isPunching  = false;
    Rectangle   fist;

    public BoxerSprite(float pX, float pY, float pWidth, float pHeight, ITiledTextureRegion pTiledTextureRegion,
            ITiledSpriteVertexBufferObject pTiledSpriteVertexBufferObject) {
        super(pX, pY, pWidth, pHeight, pTiledTextureRegion, pTiledSpriteVertexBufferObject);

        //Create a "fist" object within your boxer sprite
        fist = new Rectangle(fistX, fistY, fistWidth, fistHeight, vertexBufferObjectManager);

        //Use setPosition to move the fist to the appropriate location during the animation.
        fist.setPosition(pX, pY);
    }

}
于 2013-02-28T01:01:05.727 回答