4

我正在为使用 XNA 的项目开发一个迷你游戏,并且我有一个名为“Sprite.cs”的基类,它包含一个位置向量 ( public Vector2 m_vPosition;)。然后我有一个名为“Player.cs”的派生类。我编写了一个用于碰撞检测的类,其中一个函数接收 2 个精灵对象(其中gameObject也派生自 Sprite.cs),并使用 intersect 函数返回真或假答案。

问题是当我单步执行代码时,一旦它跳转到碰撞检测功能,它就会显示我的播放器的位置是它在加载时设置的位置,并且即使在我在屏幕上移动播放器时也不会改变虽然在这个函数之外它表明位置向量工作正常。

我相信我的问题是当我将播放器对象传递给函数时,它无法访问基类(Sprite.cs)变量。以下是一些代码片段。

精灵.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));

游戏1.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