这是我第一次发帖,但我在这个网站上发现了很多对我的编程有很大帮助的东西。
我正在尝试编写一个简单的游戏功能,以帮助更好地学习一般编程的来龙去脉,但我已经碰壁了。当试图创建一个函数来获取我的玩家和敌人类并轻松绘制、更新和检查碰撞时,我创建了它们的父类。然后我列出了每个子类(玩家和敌人,所以我可以随意添加多个)以添加到父列表中。我希望我可以使用父列表让子类只需一个列表调用就可以完成相应的功能,但是每当我运行我的代码时,就会发生奇怪的事情。例如,如果 currentPlayers 超过 1,则不会绘制任何敌人,并且与敌人相对。我也不能(正确地)运行我的碰撞函数,因为它运行的是子列表而不是父列表。
我想我真正的问题是如何将子列表与父列表分开,但仍然使用父列表来进行所有函数调用。例如使用actorList调用Player.Update和enemy.Update,但仍然使用actorList调用我的碰撞检测并确定actorList[i]是玩家还是敌人。再次感谢您的宝贵时间。`
class ActorManager
{
static ActorManager instance;
List<Enemy> enemies = new List<Enemy>();
List<Player> players = new List<Player>();
int currentActors;
int currentEnemies =1;
int currentPlayers = 1;
List<Actor> actorList = new List<Actor>();
public static ActorManager Instance
{
get
{
if (instance == null)
instance = new ActorManager();
return instance;
}
}
public void Init()
{
for (int i = 0; i < currentPlayers; i++)
{
players.Add(new Player());
}
for (int i = 0; i < currentEnemies; i++)
{
enemies.Add(new Enemy());
}
// updates how many actors are currently in game
this.UpdateCurrentActors();
for (int i = 0; i < currentPlayers; i++)
{
actorList.AddRange(players);
}
for (int i = 0; i < currentEnemies; i++)
{
actorList.AddRange(enemies);
}
}
public void LoadContent(ContentManager Content)
{
this.UpdateCurrentActors();
for (int i = 0; i < currentActors; i++)
{
actorList[i].LoadContent(Content);
}
}
public void Update(GameTime gameTime)
{
for (int i = 0; i < currentActors; i++)
{
actorList[i].Update(gameTime);
}
CheckPlayerHit();
this.UpdateCurrentActors();
}
public void Draw(SpriteBatch spriteBatch)
{
for (int i = 0; i < currentActors; i++)
{
actorList[i].Draw(spriteBatch);
}
}
void UpdateCurrentActors()
{
currentActors = (currentEnemies + currentPlayers);
}
void CheckPlayerHit()
{
for (int i = 0; i < currentPlayers; i++)
{
Rectangle thePlayer = new Rectangle((int)players[i].AttackBox.X, (int)players[i].AttackBox.Y, players[i].AttackBox.Width, players[i].AttackBox.Height);
for (int j = 0; j < currentEnemies; j++)
{
Rectangle theEnemy = new Rectangle((int)enemies[j].HitBox.X, (int)enemies[j].HitBox.Y, enemies[j].HitBox.Width, enemies[j].HitBox.Height);
if (thePlayer.Intersects(theEnemy))
{
if (players[i].IsAttacking == true)
{
enemies[j].CurrentHealth -= players[i].Strength;
}
}
}
}
}
}
}`
如果有什么我忘记了,请随时问。