2013-02-27 65 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