2013-02-23 61 views
0

我正在使用LWJGL和Slick2D来制作游戏。我似乎无法让它画出我想要绘制的方式,所以我想出了一个想法来制作我自己的绘图方法。基本上它需要一个图像,ax和ay,并且它会遍历图像中的每个像素,获取颜色,然后使用参数x加上它所在的x像素绘制图像,以获取该像素应该绘制的位置上。与y相同的想法。虽然如果alpha通道不是255像素,它不会绘制它,尽管稍后我会解决它。问题是,每当我运行我的代码,我得到“线程中的异常”主“java.lang.ArrayIndexOutOfBoundsException:-2044”。我很困惑。我希望有人能够弄清楚为什么会发生这种情况。无理由抛出随机outofboundsexception?

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

首先,您是否有错误发生位置的行号(如果您确切知道抛出异常的位置,它会使调试更容易)?其次,在代码的这一部分中我没有看到任何明确的数组引用 - 查看您访问数组的位置,然后检查并查看是否有任何变量或常量用作索引的值可能超出数组的大小。 – scaevity 2013-02-23 05:51:48

回答

0

我的答案是假设纹理是一个数组数组。

我有一种感觉,那就是getColor()方法。您的for循环遍历并将使用高度和宽度值。数组通常以0开始,宽度和高度通常只是数组数。所以我可以看到你何时到达HEIGHT,纹理数组会抛出一个异常。

尝试取出<=一部分,并与<

实例替换为:

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

它也可以帮助你开始用零这样你就可以得到整个图像。

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

这里是arrays的链接。

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

相关问题