私は XNA 4.0 を初めて使用し、プレイヤーが敵に飛び降りて殺すスーパー マリオ ブラザーズ タイプのゲームを作成しようとしています。しかし、敵を倒すのに問題が発生しました。敵の四角形rectangleBox
と交差するとenemy.alive = false
. そしてこれならenemy.alive = false
敵を引き寄せません。ただし、これは長方形が交差する時間にのみ適用されます。敵が境界を離れると、rectangleBox
再び出現します。ゲームを再起動するまで敵が再出現しないように、敵を完全に削除するにはどうすればよいですか?
敵のクラスコード:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
namespace notDMIG
{
class Enemy
{
public Texture2D texture;
public Rectangle bounds;
public Vector2 position;
public Vector2 velocity;
public float timer = 0.0f;
public int spriteNum = 1;
public int maxSpriteNum;
public bool alive;
public Enemy(Texture2D Texture, Vector2 Position, Vector2 Velocity, int maxsprites)
{
texture = Texture;
position = Position;
velocity = Velocity;
maxSpriteNum = maxsprites;
alive = false;
}
}
}
Game1.cs 敵関連コード
protected override void Update(GameTime gameTime)
{
foreach (Enemy enemy in Enemies)
{
enemy.alive = true;
Rectangle rectangleBox = new Rectangle((int)player.position.X, (int)player.position.Y + player.sprite.Height + 15, player.sprite.Width, 1);
Rectangle enemyBox = new Rectangle((int)enemy.position.X, (int)enemy.position.Y, enemy.texture.Width, enemy.texture.Height);
if (enemy.alive == true)
{
if (rectangleBox.Intersects(enemyBox))
{
enemy.alive = false;
continue;
}
}
}
}
protected override void Draw(GameTime gameTime)
{
foreach (Enemy enemy in Enemies)
{
if (enemy.alive == true)
{
spriteBatch.Draw(enemy.texture, enemy.position, Color.White);
}
}
}