Swing erstellt fillreckt immmer ein neues object

coolian

Bekanntes Mitglied
hab ein for loop in dem ich
Java:
 g.fillreckt(); g.setColor();
aufrufe nun hab ich aber das problem das immer nur ein rechteck erstellt wird und das dann bewegt wenn ich den x oder y wert ändere der ganze for loop siet so aus
Java:
for(int i = 0; i < map.length; i++){
            for(int j = 0; j < map[i].length; j++){
                g.setColor(map[i][j].color);
                g.fillRect(map[i][j].x, map[i][j].y, map[i][j].width, map[i][j].height);
                map[i][j].x += 25;
                map[i][j].y += 25;
            }
        }

map ist ein doppel array aus objecten die so ausehen
Java:
package graphics;
import java.awt.Color;
public class Cube {
    public int width;
    public int height;
    public int x;
    public int y;
    public Color color;
   
    public Cube(int width, int height, Color color, int x, int y){
        this.width = width;
        this.height = height;
        this.x = x;
        this.y = y;
        this.color = color;
    }
}
sind also nur dafür da um ein paar sachen zu speichern
jetzt ist meine theorie das was ich im titel gesagt hab das aber wenn das so ist wie könnte ich das dann machen
 
Zeig mal die Stelle wo du das Array mit Werten füllst. Deine Rechtecke liegen bestimmt einfach nur über einander
 
Java:
for(int i = 0; i < 24; i++){
            for(int j = 0; j < 32; j++){
                map[i][j] = r.c[i][j];
            }
        }
 
Java:
public class MapReader {
    int [][] mapi;
    public Cube [] [] c;
    public MapReader(int [][] mapi){
        mapi = new int [24] [32];
        this.mapi = mapi;
        c = new Cube[24] [32];
        Converter();
    }
   
    public void Converter(){
        int x = 0;
        int y = 0;
        for(int i = 0; i < mapi.length; i++){
            for(int j = 0; j < mapi[i].length; j++){
                switch(mapi[i][j]){
                case 0:
                    c[i][j] = new Cube(25, 25, Color.GRAY, x, y);
                    break;
                }
            }
        }
    }
   
    public Cube[][] getCubeMap(){
        return c;
    }
   
}
 
hast recht jetzt hab ich nach dem switch noch y += 25 und x += 25 gemacht macht zwar noch nicht hundertprozent das was ich will aber das krieg ich glaube ich hin
 
Dann darfst du x und y nicht beide gleichzeitig erhöhen. Deine äußere Schleife zählt die Zeilen, deine innere die Spalten. Bei jeder neuen Spalte (also bei jedem Durchlauf der inneren Schleife) willst du die x Koordinate erhöhen, bei jeder neuen Zeile (also bei jedem Durchlauf der äußeren Schleife) willst du die y Koordinate erhöhen.
 
Oder mal ganz allgemein:
Java:
int xOffset = 0;
int yOffset = 0;
for (int i = 0; i < numberOfTiles; i++) {
    int row = i / tilesPerRow;
    int col = i % tilesPerRow;
    int x = col * tileWidth;
    int y = row * tileHeight;
    drawTile(/* i, */ // optional Angabe des Tile-Index
        xOffset + x, yOffset + y);
}
Nachtrag: noch allgemeiner gehts natürlich, wenn die Tiles Objekte sind.
 
ungefähr so
Java:
for(int i = 0; i < mapi.length; i++){
           
            for(int j = 0; j < mapi[i].length; j++){
                switch(mapi[i][j]){
                case 0:
                    c[i][j] = new Cube(25, 25, Color.GRAY, x, y);
                    break;
                }
                x += 25;
            }
            y += 25;
        }
damit wird aber aus welchen gründen auch immer nur die obere linie angezeigt
 
doch nicht wenn ich ds fenster das ist zur zeit 600*800 größer mache sehe ich das nach einer reihe es ein nach unten geht aber er fängt eine neue zeile an aber das krieg ich hin in dem ich x auch nach jedem durchlauf resete
 
Ersetz die 25 mal durch eine Variable bzw. zwei Variablen. Wenn Du die Tilegröße mal anpassen musst, bist Du sonst nur noch am Suchen und Ersetzen.
 

Zurück
Oben