0

作成中のゲームに LWJGL と Slick2D を使用しています。思うように描けないので、自分なりの描き方を作ろうと思いつきました。基本的には、画像、ax、および ay を取り、画像内の各ピクセルを通過し、色を取得してから、パラメーター x とそのピクセルが描画される位置を取得する x ピクセルを使用して画像を描画します。の上。y と同じ考えです。ピクセルのアルファ チャネルが 255 でない場合は描画されませんが、後で修正します。問題は、コードを実行するたびに、「スレッド「メイン」で例外 java.lang.ArrayIndexOutOfBoundsException: -2044」が発生することです。私は本当に混乱しています。なぜこれが起こっているのか誰かが理解できることを願っています。

private void DrawImage(Image image, int xP, int yP)
{
    //xP And yP Are The Position Parameters

    //Begin Drawing Individual Pixels
    glBegin(GL_POINTS);
    //Going Across The X And The Y Coords Of The Image
    for (int x = 1; x <= image.getWidth(); x++)
    {
        for (int y = 1; y <= image.getHeight(); y++)
        {   
            //Define A Color Object
            Color color = null;

            //Set The Color Object And Check If The Color Is Completly Solid Before Rendering
            if ((color = image.getColor(x, y)).a == 255)
            {
                //Bind The Color
                color.bind();

                //Draw The Color At The Coord Parameters And The X/Y Coord Of The Individual Pixel
                glVertex2i(xP + x - 1, yP + y - 1);
            }
        }
    }
    glEnd();
} 
4

1 に答える 1

0

私の答えは、テクスチャがデータの配列であると仮定することです。

方法だと感じていgetColor()ます。for ループが実行され、高さと幅の値が使用されます。配列は通常 0 から始まり、幅と高さは通常配列の数です。HEIGHT に到達すると、テクスチャ配列が例外をスローすることがわかります。

部品を取り外して<=交換してみてください<

例:

for (int x = 1; x < image.getWidth(); x++)

画像全体を取得できるように、ゼロから始めることも役立つ場合があります。

for (int x = 0; x < image.getWidth(); x++)

これはarraysに関するリンクです。

このように、どの位置で色を要求しても、テクスチャ配列の範囲を超える色を要求することはありません。うまくいけば、私は理にかなっています。

于 2013-02-23T06:51:58.613 に答える