2015-12-06 92 views
0

我想要一個健康欄添加到我的2D平臺遊戲,但我不能讓健康從欄中刪除..如何從另一個類的列表中刪除一個對象? C#

這是我在我的火箭班至今想:

public void CheckPlayerCollision() 
{ 
    Player player = GameWorld.Find("player") as Player; 
    List<GameObject> gameObjects = new List<GameObject>(); 
    Health health = new Health(3, "Sprites/spr_health"); 

    if (this.CollidesWith(player) && this.Visible) 
     foreach (GameObject obj in gameObjects) 
     { 
      SpriteGameObject h = obj as SpriteGameObject; 
      { 
       gameObjects.Remove(h); 
      } 
     } 
} 

hitdetection工程,我可以得到健康減少在健康課而不使用火箭和球員 - >見下面的第二個例子,但我試圖檢測火箭時,玩家對象在健康課堂,所以這就是爲什麼我這樣嘗試。 - >看下面的例子

public override void Update(GameTime gameTime) 
{ 
    base.Update(gameTime); 
    Player player = GameWorld.Find("player") as Player; 
    Rocket rocket = GameWorld.Find("rocket") as Rocket; 

    foreach (GameObject obj in gameObjects) 
    { 
     SpriteGameObject h = obj as SpriteGameObject; 
     if (rocket.CollidesWith(player)) 
     { 
      this.Remove(h); 
      return; 
     } 
    } 
} 

這是行不通的。因爲火箭或玩家是空的。

public override void Update(GameTime gameTime) 
{ 
    base.Update(gameTime); 
    Player player = GameWorld.Find("player") as Player; 
    //Rocket rocket = GameWorld.Find("rocket") as Rocket; 

    foreach (GameObject obj in gameObjects) 
    { 
     SpriteGameObject h = obj as SpriteGameObject; 
     if (player.Position.X > 200) 
     { 
      this.Remove(h); 
      return; 
     } 
    } 
} 

這確實刪除健康當玩家移動過去200個像素..

我不能想出一個辦法來得到這個健康酒吧工作..

這是一些更這可能是有用的信息:

class Health : GameObjectList 

public Health(int layer = 3, string id = "") : base(layer, id) 
{ 
    for(int i = 0; i < 255; i+=85) 
     if(i % 85 == 0) 
     { 
      SpriteGameObject health = new SpriteGameObject("Sprites/spr_health", 3); 
      health.Position = new Vector2(120 + i, 15); 
      this.Add(health); 
     } 
} 

..

class Rocket : AnimatedGameObject 

..

partial class Player : AnimatedGameObject 
+0

我真的無法弄清楚問題在這裏。你說你試圖讓健康從酒吧中消失 - 你是想減少數字還是刪除酒吧?你是否得到了一個你不明白的具體錯誤? –

+0

我試圖一次重複1個SpriteGameObject健康狀況,因爲其中3個組成了健康狀況欄 – Ankou

+0

刪除*。當玩家接觸火箭時,我試圖從3中移除1個生命值。 – Ankou

回答

0

在下面的代碼,您正在設置health,但引用gameObjects。您不會爲gameObjects添加健康:

Health health = new Health(3, "Sprites/spr_health"); 

if (this.CollidesWith(player) && this.Visible) 
    foreach (GameObject obj in gameObjects) 
    { 
     SpriteGameObject h = obj as SpriteGameObject; 
     { 
      gameObjects.Remove(h); 
     } 
    } 

在第二個示例中,您說火箭或玩家爲空。您還沒有包括在其中添加它們的代碼,但由於您使用的是下面的結構:

Player player = GameWorld.Find("player") as Player; 

如果.Find功能失敗,那麼player將是無效的。

最後,你說當玩家通過200像素下面的代碼不會刪除健康:

SpriteGameObject h = obj as SpriteGameObject; 
if (player.Position.X > 200) 
{ 
    this.Remove(h); 
    return; 
} 

您沒有搜索或檢查在任何時候Health對象。

+0

謝謝!但最後一點,當玩家通過200px時,那一點代碼會消除健康 – Ankou

+0

是的 - 這就是你的代碼所說的:if(player.Position.X> 200) –

相關問題