我正在使用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();
}
答案 0 :(得分:0)
我的回答是假设纹理是数据数组。
我觉得这是getColor()
方法。你的for循环贯穿并将使用高度和宽度值。数组通常从0开始,宽度和高度通常只是数组计数。所以当你到达HEIGHT时,我可以看到纹理数组将抛出异常。
尝试删除<=
部分并将其替换为<
实施例
for (int x = 1; x < image.getWidth(); x++)
它也可以帮助你从零开始,这样你就可以获得整个图像。
实施例
for (int x = 0; x < image.getWidth(); x++)
以下是arrays上的链接。
这样,当你在任何位置询问颜色时,它永远不会要求颜色超出纹理数组中的颜色。希望我有道理。