C# 关于二维矩形阵列的XNA混淆
我正在制作一个平铺策略游戏,虽然它的复杂性甚至与之不同。然而,我遇到了一些我自己都搞不清楚的事情。它应该使瓷砖成为红色,如果我再次单击它,它应该会使其恢复正常。但它所做的是:在前4个左右的瓷砖中,它使对面的每一个红色都垂直翻转,但这应该可以通过反转x和y值来修复。然而,在第四个平铺之后,所有的东西都被放在了一个随机的地方(或者至少看起来是这样)。我自己真的弄不明白,我已经从头重写了3次。如果一个更有经验的程序员能告诉我我的问题,我会非常感激 我的代码(切块相关):C# 关于二维矩形阵列的XNA混淆,c#,xna,tile,C#,Xna,Tile,我正在制作一个平铺策略游戏,虽然它的复杂性甚至与之不同。然而,我遇到了一些我自己都搞不清楚的事情。它应该使瓷砖成为红色,如果我再次单击它,它应该会使其恢复正常。但它所做的是:在前4个左右的瓷砖中,它使对面的每一个红色都垂直翻转,但这应该可以通过反转x和y值来修复。然而,在第四个平铺之后,所有的东西都被放在了一个随机的地方(或者至少看起来是这样)。我自己真的弄不明白,我已经从头重写了3次。如果一个更有经验的程序员能告诉我我的问题,我会非常感激 我的代码(切块相关): protected overr
protected override void LoadContent()
{
LoadContent(“TextFile1.txt”);
standardTexture=Content.Load(“瓷砖/草/草瓷砖1”);
选择rects=new Rectangle[(int)baseLayer.MapDimensions.X,(int)baseLayer.MapDimensions.Y];
while(jun)相关问题。在你的LoadContent中,为什么你要用while和j++,而不仅仅是for循环?这就是for循环发明的字面意义上的循环类型。一个简单的答案:一个(可能不好的)习惯。我首先开始使用while循环,有时也使用for循环,但我总觉得有点混乱
protected override void LoadContent()
{
baseLayer.LoadContent("TextFile1.txt");
standardTexture = Content.Load<Texture2D>("Tiles/Grass/GrassTile1");
selectRects = new Rectangle[(int)baseLayer.MapDimensions.X, (int)baseLayer.MapDimensions.Y];
while (j<baseLayer.MapDimensions.Y)
{
while (i < baseLayer.MapDimensions.X)
{
selectRects[i, j] = new Rectangle(i * standardTexture.Width, j * standardTexture.Height,
standardTexture.Width, standardTexture.Height);
i++;
}
i = 0;
j++;
}
j = 0;
}
protected override void Update(GameTime gameTime)
{
while(j<baseLayer.MapDimensions.Y)
{
while(i<baseLayer.MapDimensions.X)
{
if (standardCheck.Click(selectRects[i, j], mouseState, prevMouseState))
{
if (colorArray[i, j] != Color.White)
colorArray[i, j] = Color.White;
else
colorArray[i, j] = Color.Red;
}
i++;
}
i = 0;
j++;
}
j = 0;
public class LoadMap
{
{
get { return map; }
set { map = value; }
}
public Vector2 MapDimensions
{
get { return dimensions; }
set { dimensions = value; }
}
public LoadMap()
{
lineindex = 0;
}
public void Draw(SpriteBatch spriteBatch, Texture2D[] maptexture,Color[,] color)
{
for (int i = 0; i < dimensions.X; i++)
{
for (int j = 0; j < dimensions.Y; j++)
{
if (map[i, j] == 1)
{
spriteBatch.Draw(maptexture[0],
new Vector2(j * maptexture[0].Width, i * maptexture[0].Height), color[i,j]);
}
if (map[i, j] == 2)
{
spriteBatch.Draw(maptexture[1],
new Vector2(j * maptexture[0].Width, i * maptexture[0].Height), color[i, j]);
}
if (map[i, j] == 3)
{
spriteBatch.Draw(maptexture[2],
new Vector2(j * maptexture[0].Width, i * maptexture[0].Height), color[i, j]);
}
}