However, the collision detection is only working with the first and third enemy in the array. If I 'shoot' and destroy these 2 enemies, the remaining 2 enemies don't collide with the wall and continue left/right forever....
public struct EnemyData
{
public Vector2 Position;
public bool IsAlive;
public float Angle;
public float Power;
public Color Color;
public Vector2 velocity;
}
bool isDecending;
bool isRight;
int screenWidth;
int screenHeight;
EnemyData[] enemies;
int numberOfEnemies = 4;
private void SetUpEnemies()
{
Color[] enemyColors = new Color[10];
enemyColors[0] = Color.Red;
enemyColors[1] = Color.Green;
enemyColors[2] = Color.Blue;
enemyColors[3] = Color.Purple;
enemyColors[4] = Color.Orange;
enemyColors[5] = Color.Indigo;
enemyColors[6] = Color.Yellow;
enemyColors[7] = Color.SaddleBrown;
enemyColors[8] = Color.Tomato;
enemyColors[9] = Color.Turquoise;
enemies = new EnemyData[numberOfEnemies];
for (int i = 0; i < numberOfEnemies; i++)
{
enemies[i].IsAlive = true;
enemies[i].Color = enemyColors[i];
enemies[i].Angle = MathHelper.ToRadians(0);
enemies[i].Power = 250;
enemies[i].velocity = new Vector2(8, 3);
}
enemies[0].Position = new Vector2(50, (screenHeight / 5));
enemies[1].Position = new Vector2(100, (screenHeight / 5));
enemies[2].Position = new Vector2(150, (screenHeight / 5));
enemies[3].Position = new Vector2(200, (screenHeight / 5));
}
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
enemy1Tex = Content.Load<Texture2D>("Textures\\enemy1");
SetUpEnemies();
}
private void UpdateEnemies()
{
if (!isDecending)
{
for (int i = 0; i < numberOfEnemies; i++)
{
if (isRight) enemies[i].Position.X += 4;
else enemies[i].Position.X -= 4;
}
{
for (int i = 0; i < numberOfEnemies; i++)
{
bool hitLeft = enemies[i].Position.X == 10;
bool hitRight = enemies[i].Position.X == screenWidth - 42;
if ((hitLeft) || (hitRight))
{
isRight = !isRight;
isDecending = true;
}
}
}
}
else
{
isDecending = false;
for (int i = 0; i < numberOfEnemies; i++)
{
enemies[i].Position.Y += enemy1Tex.Height / 2;
}
}
}
private void DrawEnemies()
{
foreach (EnemyData enemy in enemies)
{
if (enemy.IsAlive)
{
int xPos = (int)enemy.Position.X;
int yPos = (int)enemy.Position.Y;
Vector2 enemyOrigin = new Vector2(enemy1Tex.Width / 2, enemy1Tex.Height / 2);
spriteBatch.Draw(enemy1Tex, new Vector2(xPos + 20, yPos - 10), null, enemy.Color, enemy.Angle, enemyOrigin, enemyScaling, SpriteEffects.None, 1);
}
}
}
Thank you! I just can't figure out what i'm doing wrong! I'm checking through every enemy every time they might be colliding via a if loop?

New Topic/Question
Reply


MultiQuote




|