# relevanter bereich einer isometrischen karte zeichnen (AffineTransform)



## Eichelhäer (20. Jun 2021)

Hi, ich möchte den relevanen teil einer isometrischen karte zeichnen, da ich große isometrische karten anzeigen möchte.
Allerdings versuche ich das mit der AffineTransform klasse. Meine transform besitzt eine translation eine skalierung und eine rotation auf jede kachel.
Ich habe das spielfeld mit screen koordinaten in abhängigkeit von der translation in 2 for schleifen abgesteckt.
Nun müsste ich die screen koordinaten int iso koordinaten umrechnen was auch geht den bereich begrenzen und wieder in screen koordinaten umrechnen. Soweit sogut. Das problem bei der sache ist, dass ich ein rechteck um 45 grad drehe und meine umrechnungs methode in world koordinaten mir vermutlich zwei drehungen ausgibt. Außerdem entsteht keine Diamant projektion sondern tile an tile. Mein ziel ist eine diamant projektion der sichtbaren tiles auf beliebig großen maps.

Hier mal der Code:

[CODE lang="java" title="MapRenderer"]

public void render(Graphics2D g2,AffineTransform transform) {


        for(int y = (int)transform.getTranslateY(); y < (int) transform.getTranslateY() + Game.SCREEN_SIZE.y;y+=Game.TILE_SIZE.y) {
            for(int x = (int)transform.getTranslateX(); x < (int) transform.getTranslateX() + Game.SCREEN_SIZE.x;x+=Game.TILE_SIZE.x) {

                Point2D iso = Tools.screenToIso(new Point2D.Double(x,y));

                if(iso.getX() >= 0 && iso.getX() < Game.WORLD_SIZE.x && iso.getY() >= 0 && iso.getY() < Game.WORLD_SIZE.y) {

                    Point2D screen = Tools.isoToScreen(new Point2D.Double(iso.getX(),iso.getY()));

                    Shape iso_map = transform.createTransformedShape(new Rectangle2D.Double(screen.getX(),screen.getY(),1,1));
                    g2.setColor(Color.white);
                    g2.draw(iso_map);
                }
            }
        }
    }[/CODE]

Was mache ich hier falch?

Wäre für Hilfe dankbar.

Gruß Eichelhäer


----------

