0

我正在尝试检查 2 个类之间的 Rectangle 碰撞;Game1.cs 和 Terrain.cs。

不知何故,当我更改我的 Terrain.cs 构造函数以包含 Rectangle 来检测碰撞时,它需要 Rectangle,但不能在 Update 方法中更改它。例如,我做了一个名为 playerRectangle 的 Rectangle,并在构造函数中请求了一个 playerRectangle Terrain,我在构造函数中添加了代码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);
        }
4

2 回答 2

0

我不知道您如何尝试更新它,但应该有问题。
也许您需要的是Terrain类中的一种方法来更改playerRectangle,例如:

public void SetPlayerRectangle(Rectangle rect)
{
   this.playerRectangle = rect;
}
于 2013-10-30T19:39:33.827 回答
0

代替

playerRectangle.X = 200;

做这个:

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

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

于 2013-10-30T11:13:35.373 回答