4

XNAを使用したプロジェクトのミニゲームを開発していて、位置ベクトル()を保持する「Sprite.cs」という基本クラスがありpublic Vector2 m_vPosition;ます。次に、「Player.cs」という派生クラスがあります。関数が2つのスプライトオブジェクト(gameObjectSprite.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、衝突関数に渡されたときの位置ベクトルを見ると、最初にロードされたときから変更されていないことです。

これ以上の情報が必要な場合は、喜んで提供させていただきます。

前もって感謝します。

4

0 に答える 0