2013-02-23 57 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的鏈接。

這樣,當你在任何位置詢問顏色時,它永遠不會要求超出紋理數組中顏色的顏色。希望我有道理。

相關問題