无缘无故抛出随机outofboundsexception?

时间:2013-02-23 05:21:50

标签: java opengl lwjgl slick2d

我正在使用LWJGL和Slick2D进行我正在制作的游戏。我似乎无法画出我希望它绘制的方式所以我提出了一个想法,只是为了制作我自己的绘图方法。基本上它需要一个图像,斧头和ay,它通过图像中的每个像素,获取颜色,然后使用参数x加上它所在的x像素绘制图像,以获得像素所要绘制的位置上。与y相同的想法。虽然如果alpha通道不是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();
} 

1 个答案:

答案 0 :(得分:0)

我的回答是假设纹理是数据数组。

我觉得这是getColor()方法。你的for循环贯穿并将使用高度和宽度值。数组通常从0开始,宽度和高度通常只是数组计数。所以当你到达HEIGHT时,我可以看到纹理数组将抛出异常。

尝试删除<=部分并将其替换为<

实施例

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

它也可以帮助你从零开始,这样你就可以获得整个图像。

实施例

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

以下是arrays上的链接。

这样,当你在任何位置询问颜色时,它永远不会要求颜色超出纹理数组中的颜色。希望我有道理。