2016-09-02 13 views
0

私は​​のゲームのために持ち物を作ろうとしていますが、これを行う良い方法はプレイヤーに手を置くことになりました。私はその色を見つけることができます。x +ySlick2dピクセルの色でxとyを見つける

私は画像を拡大しようとするまで、それは完璧に働いていました。そして、私はこの狂気を例外から除外します。

これはxyを見つけるために私のコードです:

public int[] getLocation(Image i, Color c){ 
    Image scaled = i.getScaledCopy(getWidth(), getHeight()); 
    for(int x = 0; x < scaled.getWidth(); x++){ 
     for(int y = 0; y < scaled.getHeight(); y++){ 
      if(scaled.getColor(x, y).r == c.r && scaled.getColor(x, y).g == c.g && scaled.getColor(x, y).b == c.b){ 
       int[] xy = {x,y}; 
       return xy; 

      } 
     } 
    } 
    return null; 
} 

、これは私が例外がある

float x = (float) (getLocation(walkLeft.getCurrentFrame(), new Color(1, 1, 1))[0] + getX()); 
    float y = (float) (getLocation(walkLeft.getCurrentFrame(), new Color(1, 1, 1))[1] + getY()); 
    g.fillRect(x, y, 2, 2); 

それを使用する方法です:

java.lang.ArrayIndexOutOfBoundsException: 16384 

、それがリード私はこの行に戻ります:

   if(i.getColor(x, y).r == c.r && i.getColor(x, y).g == c.g && i.getColor(x, y).b == c.b){ 

getLocationの方法です。 私はその死んだことを簡単に感じましたが、それは私を困惑させました。応答する誰にも感謝します。

+0

イメージを拡大する理由は? 'getLocation'は、画像の2倍の拡大/縮小コピーをループし、元のピクセルをチェックしようとします。 – copeg

+0

getLocationを更新しましたが、それでも同じ問題が発生しました。 – TheRandomBeast1

+0

'私はgetLocationを更新しました。 ()とgetHeight() - 元のImage(投稿されたコードからはっきりしない)とサイズが再度異なる場合があります。なぜあなたはスケールする必要がありますか? – copeg

答えて

0

getLocationのループは、画像の2倍の縮尺のコピーの寸法をループしますが、元のピクセルにアクセスしようとします。オリジナルが半分の大きさであることを考えると、ループの途中にいると、イメージの範囲外になります。次のいずれかの

  1. あなたはスケーリングされたイメージではなく、元の画素値をチェックし、画像を拡大縮小しなければならない場合は画像
  2. をスケーリングしないでください。

あなたが拡大しようとしている場合はさておき、投稿コードが冗長な呼び出し... A)getLocation中に含まれているため、コールするb)は不要画像をスケーリングしない、一度ではなく、ループ自体の中にそのコードを配置することを検討getLocation同じパラメータで2回。一度呼び出すと、返された配列を使用します

+0

同じ問題を解決するために、getLocationメソッドを更新しました。 – TheRandomBeast1

+0

私はこの問題の一時的な解決策を見つけましたが、まだそれは私を悩ませています。私は画像の拡大された量でx倍、それはまだ動作するように見える私はまだ私の以前のコードが動作しなかった理由についての解決策を探しています – TheRandomBeast1

関連する問題