1

このwhileループは、必要な値を長方形配列に適切に格納しません。長方形は、スプライトシートからスプライトを引き出すために使用されます。以下のコメントアウトされたコードは完全に機能します。内側のループは最初の行を設定するために完全に機能しますが、外側のループを追加するとすべてが台無しになります。sizeOfEachSpriteXとsizeOfEachSpriteYの値は両方とも32です(スプライトは正方形です)。スプライトシートのサイズは、幅96、高さ128です。これは、4行、3列のスプライトです。目標は、コメントアウトされたコードが達成するように、長方形を長方形[どの行、どの列]として宣言することです。後の反復が最初の反復のデータを上書きし、プロセス全体を破壊しているように見えます。私はかなり混乱しています!

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);
*/
4

2 に答える 2

1

内側の while ループのそれぞれの前に n 変数を 0 にリセットする必要があります。現在は 4 に達しており、内側の while ループに再び入ることはありません。

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++;
}
于 2012-07-16T15:47:57.417 に答える
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 であるため、内側のループは決して実行されません。

于 2012-07-16T15:48:59.037 に答える