Итак, я искал часы без каких-либо результатов и действительно надеюсь, что вы могли бы мне помочь. У меня возникают проблемы с работой пересечения. Ничего не происходит, когда мои классы сталкиваются, что, вероятно, я слепой, но также очень новый для XNA. Я создал игру Shoot-Em-Up, и я хочу, чтобы игра заканчивалась, когда управляемый игроком шаттл сталкивается с противником.XNA - Пересечение классов - 2D
Использование классов; Game1.cs, Player.cs и Enemy.cs. Обратите внимание, что я только вставил информацию, которая, как мне кажется, необходима, чтобы понять это.
Game1.cs
protected override void LoadContent()
{
shuttle = new Player(Content.Load<Texture2D>(@"spaceship"), new Vector2(300, 400), new Vector2(24, 24), spriteBatch);
}
protected override void Update(GameTime gameTime)
{
if (random.Next(0, 70) < droprate)
{
int posX = random.Next(20, 580);
enemyList.Add(new Enemy(Content.Load<Texture2D>(@"enemy1"), new Vector2(posX, -50), new Vector2(24, 24), spriteBatch));
droprate += 0.10;
}
foreach (Enemy e in enemyList)
{
if (shuttle.rectangle.Intersects(e.rectangle))
Exit();
}
}
Player.cs
public Rectangle rectangle;
public Player(Texture2D texture, Vector2 initialPos, Vector2 origin, SpriteBatch spriteBatch) : base(texture, initialPos, origin, spriteBatch)
{
this.rectangle = new Rectangle(Convert.ToInt32(initialPos.X), Convert.ToInt32(initialPos.Y), 48, 48);
}
public override void Update(GameTime gameTime)
{
KeyboardState keyboardState = Keyboard.GetState();
if (keyboardState.IsKeyDown(Keys.Right))
{
initialPos.X += 9;
}
if (keyboardState.IsKeyDown(Keys.Left))
{
initialPos.X -= 9;
}
if (keyboardState.IsKeyDown(Keys.Up))
{
initialPos.Y -= 5;
}
if (keyboardState.IsKeyDown(Keys.Down))
{
initialPos.Y += 5;
}
initialPos.X = MathHelper.Clamp(initialPos.X, 18, screenWidth - 18);
initialPos.Y = MathHelper.Clamp(initialPos.Y, 24, screenHeight - 24);
base.Update(gameTime);
}
Enemy.cs
public Rectangle rectangle;
public Enemy(Texture2D texture, Vector2 initialPos, Vector2 origin, SpriteBatch spriteBatch) : base(texture, initialPos, origin, spriteBatch)
{
this.rectangle = new Rectangle(Convert.ToInt32(initialPos.X), Convert.ToInt32(initialPos.Y), 48, 48);
}
public override void Update(GameTime gameTime)
{
initialPos.Y += 3.5f;
if (initialPos.X < 300)
initialPos.X += 0.41f;
if (initialPos.X > 300)
initialPos.X -= 0.41f;
}
ли игрок или врагов двигаться? Кажется, вы никогда не обновляете свои границы столкновений после их первоначального создания. –
игрок/шаттл контролируется мной, а вражеские космические корабли постоянно движутся в нижней части экрана. –
А вы когда-либо обновляете значение 'rectangle' для объектов' Enemy' и 'Player'? Вы используете метод 'Intersects()' правильно, что означает, что данные, которые вы ему даете, ошибочны. –