【问题标题】:How to handle particular rectangular portion collision in AndEngine如何在 AndEngine 中处理特定的矩形部分碰撞
【发布时间】:2013-02-27 13:00:04
【问题描述】:

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

【问题讨论】:

    标签: android collision-detection andengine collision


    【解决方案1】:

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

    当拳击手出拳时,您想要确定在动画中接触“很重要”的关键时间段(大概是在出拳的完全延伸时,并且在出拳之前和之后都有一点延伸。)在那段时间,将拳击手上的一些布尔值设置为 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);
        }
    
    }
    

    【讨论】:

    • 感谢重播。我如何计算拳击手的拳头部分。请解释清楚。
    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多