C# 关于二维矩形阵列的XNA混淆

C# 关于二维矩形阵列的XNA混淆,c#,xna,tile,C#,Xna,Tile,我正在制作一个平铺策略游戏,虽然它的复杂性甚至与之不同。然而,我遇到了一些我自己都搞不清楚的事情。它应该使瓷砖成为红色,如果我再次单击它,它应该会使其恢复正常。但它所做的是:在前4个左右的瓷砖中,它使对面的每一个红色都垂直翻转,但这应该可以通过反转x和y值来修复。然而,在第四个平铺之后,所有的东西都被放在了一个随机的地方(或者至少看起来是这样)。我自己真的弄不明白,我已经从头重写了3次。如果一个更有经验的程序员能告诉我我的问题,我会非常感激 我的代码(切块相关): protected overr

我正在制作一个平铺策略游戏,虽然它的复杂性甚至与之不同。然而,我遇到了一些我自己都搞不清楚的事情。它应该使瓷砖成为红色,如果我再次单击它,它应该会使其恢复正常。但它所做的是:在前4个左右的瓷砖中,它使对面的每一个红色都垂直翻转,但这应该可以通过反转x和y值来修复。然而,在第四个平铺之后,所有的东西都被放在了一个随机的地方(或者至少看起来是这样)。我自己真的弄不明白,我已经从头重写了3次。如果一个更有经验的程序员能告诉我我的问题,我会非常感激

我的代码(切块相关):

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]);
                }
            }