0

2 つの for ループがあり、そのデータを 1 つの配列に保存したいと考えています。最初の for ループは、配列内に 5 つの四角形を作成します。その後、2 番目の for ループは 5 つの四角形を作成し、それらを配列に追加します。しかし、何かがうまくいきません。コードの最後の行に「インデックスが配列の範囲外でした」というエラー メッセージが表示され、何を変更すればよいかわかりません。

int framewidth = texture.Width / sourceRects.Length; 
int frameheight = texture.Height; 

private void vorrück(Rectangle[] sourceRects, int framewidth, int frameheight) 
    { 
        int doublelenght = sourceRects.Length * 2; 
        for (int i = 0; i < sourceRects.Length; i++) 
            sourceRects[i] = new Rectangle(i * framewidth, 0, framewidth, frameheight); 
        for (int normallenght = sourceRects.Length; normallenght < doublelenght; normallenght++) 
            sourceRects[normallenght] = new Rectangle((sourceRects.Length - 1 - normallenght) * framewidth, 0, framewidth, frameheight);      
    }
4

3 に答える 3

1

Rectangle[] 配列のサイズが 10 より小さいため、このエラーが発生します。Rectangle[] 配列を宣言するときは、少なくともサイズ 10 で宣言する必要があることに注意してください。

Rectangle[] sourceRects = new Rectangle[10]; //(it will be from 0 to 9)

これで、10 個の長方形を追加できます。

于 2012-09-15T15:34:48.670 に答える
0

より大きな配列が必要です。

2 番目のループは非常に明確に範囲外に書き込みます。関連する詳細は次のとおりです。

for (int normallenght = sourceRects.Length; ...; ...) 
        sourceRects[normallenght] = ...;  //  normallenght >= sourceRects.Length

一般的な解決策として、配列をあまり使用しないでください。この場合、List<Rectangle>おそらく a が好ましいデータ構造です。

于 2012-09-15T15:34:37.290 に答える
0

あなたは 2 つの間違いを犯しました (resize と second for never works の欠落)。私の変更されたコードを見てください:

    private void vorrück(ref Rectangle[] sourceRects, int framewidth, int frameheight)
    {
        int doublelenght = sourceRects.Length * 2;     
        for (int i = 0; i < sourceRects.Length; i++)
        { 
            sourceRects[i] = new Rectangle(i * framewidth, 0, framewidth, frameheight);
        }
        Array.Resize(ref sourceRects, doublelenght); 
        for (int normallenght = sourceRects.Length /2; normallenght < doublelenght; normallenght++)
        {
            sourceRects[normallenght] = new Rectangle((sourceRects.Length - 1 - normallenght) * framewidth, 0, framewidth, frameheight);
        }
    }

このコードは、sourceRects 配列のサイズを変更して埋めます。

このコードは次のように使用できます。

        Rectangle[] sourceRects = new Rectangle[2];
        vorrück(ref sourceRects,5,4);
于 2012-09-15T15:45:16.393 に答える