如何在AndEngine中处理特定的矩形部分碰撞

时间:2013-02-27 13:00:05

标签: android collision-detection andengine collision

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

1 个答案:

答案 0 :(得分:0)

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

punch

当拳击手拳打脚踢时,你想确定动画中接触的重要时间段"事项" (大概是在拳头的完全延伸,并且在它之前和之后都延伸了一点。)在那段时间内,在你的拳击手上设置一些布尔值为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);
    }

}