我想要一個健康欄添加到我的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
我真的無法弄清楚問題在這裏。你說你試圖讓健康從酒吧中消失 - 你是想減少數字還是刪除酒吧?你是否得到了一個你不明白的具體錯誤? –
我試圖一次重複1個SpriteGameObject健康狀況,因爲其中3個組成了健康狀況欄 – Ankou
刪除*。當玩家接觸火箭時,我試圖從3中移除1個生命值。 – Ankou