Ich versuche, haltbare Elemente für meine slick2d
Spiel zu machen, dachte ich, ein guter Weg, dies zu tun wäre, eine Hand auf den Spieler zu haben, um dies zu tun, ich habe 1 Pixel a einzigartige Farbe, die es mir erlaubt, diese Farbe zu finden, und die x +y
.Slick2d Ortung x und y durch Pixelfarbe
Es funktionierte perfekt, bis ich versuchte, das Bild zu vergrößern, und ich bekomme diese verrückte Out-of-Bound-Ausnahme.
dies ist mein Code die x
und y
zu finden:
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;
}
und das ist, wie ich es ist
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);
die Ausnahme verwenden:
java.lang.ArrayIndexOutOfBoundsException: 16384
und führt Ich zurück zu dieser Zeile:
if(i.getColor(x, y).r == c.r && i.getColor(x, y).g == c.g && i.getColor(x, y).b == c.b){
in der getLocation
Methode .. Ich habe ein Gefühl, es ist tot einfach, doch es ist mir ratlos. Danke an alle, um zu antworten.
Warum skalieren Sie das Bild? Die 'getLocation'-Schleife über die Breite/Höhe einer 2x skalierten Kopie des Bildes, dann versucht, die Pixel des Originals zu überprüfen – copeg
Ich aktualisierte die getLocation, immer noch das gleiche Problem – TheRandomBeast1
' Ich aktualisierte die getLocation' Das Update verwendet getWidth() und getHeight() - die sich wiederum in der Größe vom Original-Bild unterscheiden können (unklar vom geposteten Code). Warum musst du skalieren? – copeg