Ich habe etwas seltsames passiert, während ich versuche, eine Kachel zu teilen, um zu JPanel zu zeichnen. Zuerst ist das das zugehörige Stück Code:Splitting Tilemap Bild in Schaukel
private void drawTile(Graphics g,MapController mc,int gid){
int cols = mc.getMap().getTileset().getColumns();
int x = (gid % cols);
int y = gid/cols;
int tilewidth = mc.getTilewidth();
int tileheight = mc.getTileheight();
int dx1 = 0;
int dx2 = dx1+tilewidth;
int dy1 = 0;
int dy2 = dy1+tileheight;
int sx1 = (x)*tilewidth;
int sx2 = sx1+tilewidth;
int sy1 = y*tileheight;
int sy2 = sy1+tileheight;
g.drawImage(mc.getSpriteImage(), dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, null);
}
Diese innerhalb einer Schleife ist, die auf einer Karte durch die Schichten iteriert und jede Kachel an eine Platte zeichnet. Wenn ich mein Programm ausführe, funktioniert es größtenteils korrekt, aber ich erkannte, dass x-Achse um 1 "Kachelbreite" (32px) deaktiviert war. dies wird die Ausgabe erhalte ich:
Dies ist mehr oder weniger, wie es andere aussehen sollte, als die Fliesen alle auf der x-Achse 32px ausgeschaltet werden
Ich bin ziemlich sicher, das liegt daran, Ich konvertiere die CSV in einen int [] und der Index beginnt bei 0, aber mein Raster beginnt bei 1. Einfache Lösung, oder? Ziehen Sie einfach 1 von meinem x-Wert ab, um die sx1 meines Quellbilds 32px nach links zu verschieben.
Überarbeitete Code:
private void drawTile(Graphics g,MapController mc,int gid){
int cols = mc.getMap().getTileset().getColumns();
int x = (gid % cols)-1; //notice the -1
int y = gid/cols;
int tilewidth = mc.getTilewidth();
int tileheight = mc.getTileheight();
int dx1 = 0;
int dx2 = dx1+tilewidth;
int dy1 = 0;
int dy2 = dy1+tileheight;
int sx1 = x*tilewidth;
int sx2 = sx1+tilewidth;
int sy1 = y*tileheight;
int sy2 = sy1+tileheight;
g.drawImage(mc.getSpriteImage(), dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, null);
}
Nun, wenn ich es laufen bekomme ich diese:
ich in einigen Problem Linien setzen und es sieht aus wie die Koordinaten ich für die bin das Senden Quellbild sind korrekt. Ich habe sogar versucht:
g.drawImage(mc.getSpriteImage(), dx1, dy1, dx2, dy2, sx1-32, sy1, sx2, sy2, null);
Alles, was ich versucht habe, gibt mir die gleichen Ergebnisse. Gibt es hier etwas, das ich vermisse?
* "Nur 1 von meinem x-Wert subtrahieren" * - Warum nicht '1' von' gid'? – MadProgrammer
Das Ändern des GID würde auch die Y-Achse beeinflussen. Es ist nur die X-Achse ausgeschaltet. Die Gids stimmen mit dem in der CSV-Datei überein. (Ich habe das schon mal probiert) – kookej
Vielleicht zeichnest du Sachen übereinander und dann sind einige Dinge nicht mehr sichtbar. – Trilarion