如何检查类之间2个矩形的碰撞?

时间:2013-10-30 04:29:23

标签: c# xna collision-detection

我正在尝试检查两个类之间的Rectangle的冲突; Game1.cs和Terrain.cs。

当我改变我的Terrain.cs构造函数以包含Rectangle以检测碰撞时,它采用Rectangle,但不能在Update方法中更改它。例如,我创建了一个名为playerRectangle的Rectangle,并在Terrain构造函数中要求一个playerRectangle,并在Terrain构造函数中添加了代码:

this.playerRectangle = playerRectangle;

在Game1更新方法中,我创建了一个for循环,用于更新Terrain个对象的数组。我通过在Terrain.cs更新方法中添加代码来测试它是否会改变playerRectangle的位置:

playerRectangle.X = 200;

原来的playerRectangle X是450.它保持在450.没有任何变化。

有人能在这里找到问题吗?

地形构造函数:

public Terrain(ContentManager contentManager, Rectangle playerRectangle, Texture2D chunkSprite, int y, int x)
    {
        chunks = chunkSprite;
        this.y = y;
        this.x = y;
        this.playerRectangle = playerRectangle;

        //Load drawRectangle
        drawRectangle = new Rectangle(x, y, 50, 50);

    }

for循环加载:

for (int i = 0; i < terrain.Length; i++)
        {
            number2 += 50;
            terrain[i] = new Terrain(Content, drawRectangle, sprite, 550, number2);
        }

更新

for (int i = 0; i < terrain.Length; i++)
        {
            terrain[i].Update(gameTime);
        }

并绘制:

 for (int i = 0; i < terrain.Length; i++)
        {
            terrain[i].Draw(spriteBatch);
        }

2 个答案:

答案 0 :(得分:0)

而不是

playerRectangle.X = 200;

这样做:

playerRectangle = new Rectangle (200, playerRectangle.Y, playerRectangle.Width, playerRectangle.Height);

更改playerRectangle的属性可能不会触发正确的通知

答案 1 :(得分:0)

我不知道你是如何尝试更新它的,但应该有些不对劲。
也许你需要的是Terrain课程中改变playerRectangle的方法,例如:

public void SetPlayerRectangle(Rectangle rect)
{
   this.playerRectangle = rect;
}