XNAを使用したプロジェクトのミニゲームを開発していて、位置ベクトル()を保持する「Sprite.cs」という基本クラスがありpublic Vector2 m_vPosition;
ます。次に、「Player.cs」という派生クラスがあります。関数が2つのスプライトオブジェクト(gameObject
Sprite.csからも派生)を取り込んで、intersect関数を使用するとtrueまたはfalseの答えが返される衝突検出用のクラスを作成しました。
問題は、コードをステップ実行すると、その衝突検出機能にジャンプすると、プレーヤーの位置がロード時に設定された位置にあることを示し、プレーヤーを画面上で動かしても変化しないことです。この関数の外では、位置ベクトルが正常に機能していることを示しています。
私の問題は、プレーヤーオブジェクトを関数に渡すと、基本クラス(Sprite.cs)変数にアクセスできないことだと思います。ここにいくつかのコードスニペットがあります。
Sprite.cs
public Vector2 m_vPosition;
public Rectangle m_rBoundingBox;
..。
m_rBoundingBox = new Rectangle(
(int)m_vPosition.X,
(int)m_vPosition.Y,
(int)(m_fWidth * m_fScale),
(int)(m_fHeight * m_fScale));
Game1.cs
Player playerSprite;
playerSprite = new Player(); //where player is a child of sprite
..。
if ((Collision.BoxtoBoxCollision(playerSprite, gameObject)))
{
playerSprite.m_vPosition = new Vector2(100, 100);
//just testing to see if collision works, not collision logic.
}
衝突.cs
public bool BoxtoBoxCollision(Sprite objectOne, Sprite objectTwo)
{
if (objectOne.m_rBoundingBox.Intersects(objectTwo.m_rBoundingBox))
{
return true;
}
else
{
return false;
}
}
したがって、私の問題はplayerSprite
、衝突関数に渡されたときの位置ベクトルを見ると、最初にロードされたときから変更されていないことです。
これ以上の情報が必要な場合は、喜んで提供させていただきます。
前もって感謝します。