2013-02-27 62 views

回答

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); 
    } 

} 
+0

谢谢你的重播,我可以计算boxer.please的第一部分清楚地向我解释。 – user1351341 2013-02-28 05:18:40

+1

@ user1351341添加了一些示例代码来帮助您。 – 2013-02-28 10:33:18