2012-07-16 37 views
1

此while循环未正确存储矩形数组所需的值。矩形用于从精灵表中拉出精灵。下面的注释代码完美地工作。内部循环完全适用于设置第一行,但添加外部循环会弄乱所有内容。 sizeOfEachSpriteX和sizeOfEachSpriteY的值都是32(精灵是方形的)。 spritesheet大小是96宽128高。它是4行,3列精灵。目标是将矩形声明为Rectangles [哪一行,哪一列],如注释掉的代码所实现的那样。看起来后面的迭代覆盖了第一次迭代的数据,并摧毁了整个过程。我很困惑!使用嵌套循环正确加载数组时出现问题

int n = 0; 
int n2 = 0; 
while (n2 < 5) 
     { 
      while (n < 4) 
      { 
       Rectangles[n2, n] = new Rectangle 
        (sizeOfEachSpriteX * n2, 
         sizeOfEachSpriteY * n, 
         sizeOfEachSpriteX, 
         sizeOfEachSpriteY); 
       n++; 
      } 
      n2++; 
     } 


/* This code works perfectly. 
     Rectangles[0,0] = new Rectangle(0,0,32,32); 
     Rectangles[0,1] = new Rectangle(0,32,32,32); 
     Rectangles[0,2] = new Rectangle(0,64,32,32); 
     Rectangles[0,3] = new Rectangle(0,96,32,32); 
     Rectangles[1,0] = new Rectangle(32,0,32,32); 
     Rectangles[1,1] = new Rectangle(32,32,32,32); 
     Rectangles[1,2] = new Rectangle(32,64,32,32); 
     Rectangles[1,3] = new Rectangle(32,96,32,32); 
     Rectangles[2,0] = new Rectangle(64,0,32,32); 
     Rectangles[2,1] = new Rectangle(64,32,32,32); 
     Rectangles[2,2] = new Rectangle(64,64,32,32); 
     Rectangles[2,3] = new Rectangle(64,96,32,32); 
*/ 

回答

1

需要重启N到0当你与每一个内部循环中完成

int n = 0; 
int n2 = 0; 
while (n2 < 5) 
    { 
     n = 0; 
     while (n < 4) 
     { 
      Rectangles[n2, n] = new Rectangle 
       (sizeOfEachSpriteX * n2, 
        sizeOfEachSpriteY * n, 
        sizeOfEachSpriteX, 
        sizeOfEachSpriteY); 
      n++; 
     } 
     n2++; 
    } 

发生的事情是,N2> 0,n是已经4,所以永远不会执行内环。

+0

你真棒。我应该亲自看过这个。我希望我有更多的声望,所以我可以upvote你! – SoylentGreen 2012-07-17 03:31:06

1

你需要while循环,现在它达到4,和你的内心,而循环也绝不会再次进入到你的N个变量每个内部之前重置为0。

int n = 0; 
int n2 = 0; 
while (n2 < 5) 
{ 
    n = 0; 
    while (n < 4) 
    { 
     Rectangles[n2, n] = new Rectangle 
        (sizeOfEachSpriteX * n2, 
         sizeOfEachSpriteY * n, 
         sizeOfEachSpriteX, 
         sizeOfEachSpriteY); 
     n++; 
    } 
    n2++; 
}