との両方Vector2
を使用Rectangle
して、オブジェクトの座標を表すことができます。私は通常、次のようにします。
public class GameObject
{
Texture2D _texture;
public Vector2 Position { get; set; }
public int Width { get; private set; } //doesn't have to be private
public int Height { get; private set; } //but it's nicer when it doesn't change :)
public Rectangle PositionRectangle
{
get
{
return new Rectangle((int)Position.X, (int)Position.Y, Width, Height);
}
}
public GameObject(Texture2D texture)
{
this._texture = texture;
this.Width = texture.Width;
this.Height = texture.Height;
}
}
オブジェクトを移動するには、Position
プロパティを新しい値に設定するだけです。
_player.Position = new Vector2(_player.Position.X, 100);
長方形の値は に直接依存するため、長方形について心配する必要はありませんPosition
。
私のゲームオブジェクトには、通常、次のような自分自身を描画するメソッドも含まれています
public void Draw(SpriteBatch spriteBatch, GameTime gameTime)
{
spriteBatch.Draw(this._texture, this.Position, Color.White);
}
あなたの衝突検出コードは、衝突をテストするためにGame.Update()
使用できますPositionRectangle
//_player and _enemy are of type GameObject (or one that inherits it)
if(_player.PositionRectangle.Intersects(_enemy.PositionRectangle))
{
_player.Lives--;
_player.InvurnerabilityPeriod = 2000;
//or something along these lines;
}
spriteBatch.Draw()
with を呼び出すこともできますがPositionRectangle
、大きな違いはありません。