我正在为使用XNA的项目开发一个迷你游戏,我有一个名为“Sprite.cs”的基类,它包含一个位置向量(public Vector2 m_vPosition;
)。然后我有一个名为“Player.cs”的派生类。我编写了一个碰撞检测类,其中一个函数接收2个精灵对象(其中gameObject
也是从Sprite.cs派生的)并使用intersect函数返回一个真或假的答案。
问题在于,当我单步执行代码时,一旦它跳转到碰撞检测功能,它就会显示我的播放器的位置是它在加载时设置的位置,并且不会随着我移动玩家而改变屏幕即使在此功能之外,它也表明位置矢量工作正常。
我相信我的问题是当我将播放器对象传递给函数时,它无法访问基类(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.
}
collision.cs
public bool BoxtoBoxCollision(Sprite objectOne, Sprite objectTwo)
{
if (objectOne.m_rBoundingBox.Intersects(objectTwo.m_rBoundingBox))
{
return true;
}
else
{
return false;
}
}
所以我的问题是当我在playerSprite
传递给碰撞函数时查看位置向量时,它从第一次加载时起没有变化。
如果您需要更多信息,我很乐意提供更多信息。
提前致谢。