0

我正在为我正在制作的游戏使用 LWJGL 和 Slick2D。我似乎无法让它按照我想要的方式绘制,所以我想出了一个想法,只是为了制作我自己的绘图方法。基本上,它需要一个图像、ax 和 ay,它遍历图像中的每个像素,获取颜色,然后使用参数 x 加上它所在的 x 像素绘制图像,以获得像素应该被绘制的位置上。与 y 的想法相同。虽然如果像素的 alpha 通道不是 255,则它不会绘制它,尽管我稍后会修复它。问题是,每当我运行我的代码时,我都会得到“线程“主”java.lang.ArrayIndexOutOfBoundsException:-2044 中的异常:-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++)

这是有关数组的链接。

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

于 2013-02-23T06:51:58.613 回答