我正在尝试检查两个类之间的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);
}
答案 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;
}