2013-03-14 107 views
-2

我想提出一個2D射擊遊戲在XNA 4.0子彈碰撞

我有一顆子彈在我的遊戲,我試圖讓它與敵人發生衝突,但是當我試圖檢查其位置等於敵人它不

子彈射擊:

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using Microsoft.Xna.Framework.Graphics; 
    using Microsoft.Xna.Framework; 

namespace Moba_Turtle1 
{ 
    class Bullet 
    { 
    Texture2D bulText; 

    float timer; 
    float interval = 2; 

    public bool shot = false; 

    public Vector2 velocity; 
    bool canChange = true; 

    public Vector2 position; 
    public Vector2 lastPosition; 
    Vector2 orgin; 

    public Bullet (Texture2D newText, Vector2 newPos) 
    { 
     bulText = newText; 
     position = newPos; 
    } 

    public void Update (GameTime gameTime) 
    { 


     if (Moba_Turtle1.Character.direction == true && canChange == true) 
     { 
      canChange = false; 
      velocity.X = 50f; 
     } 

     if (Moba_Turtle1.Character.direction == false && canChange == true) 
     { 
      canChange = false; 
      velocity.X = -50f; 
     } 


     position = position + velocity; 
    } 

    public void Draw(SpriteBatch spriteBatch) 
    { 
     spriteBatch.Draw(bulText, position, null, Color.White, 0f, orgin, 1.0f, SpriteEffects.None, 0); 
    } 
} 

}

碰撞檢查:

foreach (BeeAi bee in Bees) 
     { 
      { 
       if (bullet.position == bee.position) 
        bulCol = true; 
      } 
     } 

     if (bulCol == true) 
      bullets.Clear(); 

請幫助!

+0

我沒有看到您的標籤所談論的C代碼。 – 2013-03-14 22:24:21

+0

當這成爲一個C? – 2013-03-14 22:24:28

+0

看起來子彈增加了「速度」值,所以他們可能跳過「蜜蜂」的位置? – 2013-03-14 22:26:28

回答

0

不要比較花車,因爲除非它們完全相同,否則它們將不相等。所以如果你計算的位置,你不會得到一個匹配。你應該測試子彈的位置是否在一個小範圍內。

1
bullet.position == bee.position 

positionVector2,其由float座標。子彈和蜜蜂與浮子的精確度完全相同的位置是極不可能的!

您需要重新考慮您的碰撞檢測是否沿着兩個邊界矩形重疊的線。

0

問題是,正如別人提到的那樣,你幾乎不會碰到蜜蜂的相同位置。

一個簡單的辦法可以使你的循環是這樣的:

foreach (BeeAi bee in Bees) 
{ 
    foreach (Bullet bullet in bullets) 
    { 
     if ((bullet.position - bee.position).Length() <= 10f) 
     { 
      bulCol = true; 
     } 
    } 
} 

但是這也可能失敗很容易,如果子彈的速度足夠高。

我建議你看看Ray,BoundingSphere,BoundingBox和Rectangle。

如果你的子彈始終只是水平移動,或者只是垂直移動,那麼最簡單和最好的解決方法是製作一個矩形,它跨越子彈移動最後一幀的距離,並使用Rectangle.Contains或其他東西。