# Sich bewegende Kamera



## pmSave (3. Jan 2019)

Hallo mal wieder,
ich programmiere gerade ein kleines Super Mario Spiel mit Swing. Vorab: ich weiß, dass es
mit Hilfe diverser Programme und sonstigen deutlich einfacher werden könnte, aber ich habe es mir in den Kopf gesetzt alles mit Swing und den bereitgestellten Biblitheken und Klassen(Graphics etc.) selbst zu versuchen.
Hier mal eine Aufnahme wie es im Moment aussieht:


Soweit so gut, laufen und springen funktioniert(ein paar details an der Animation fehlen noch).

Mein PROBLEM:
Wie schaffe ich es ein vollständiges Level zu erstellen? Wie kann ich eine, sich mitbewegende, "Kamera" implementieren wo man nach rechts und links laufen kann(bisher geht es nur in dem sichtbaren Bereich)?
Ich arbeite mit einem Timer, der alles neuzeichnet und der zu sehende Boden und die Testblöcke werden zum Start in einer Methode erstellt und einer festgelegten Position im Panel zugewiesen. Ich bin sicher einer von euch hat nh Idee 
Mfg


----------



## Xyz1 (3. Jan 2019)

Ja Du hast in der Klasse Figur in der dritten Methode innerhalb der zweiten zweimal verschachtelten do-while-Schleife die lokalen integer Variablen k und j vertauscht... hth.


----------



## pmSave (3. Jan 2019)

Achso klar wie konnte ich nur.


----------



## Xyz1 (4. Jan 2019)

Etwas Schusseligkeit ist ja nicht unverzeihlich  Gut das es geklappt hat


----------



## pmSave (4. Jan 2019)

ja da wir das geklärt haben, hast du eine Idee zu meinem Problem?


----------



## mihe7 (4. Jan 2019)

pmSave hat gesagt.:


> Wie kann ich eine, sich mitbewegende, "Kamera" implementieren wo man nach rechts und links laufen kann


Du hast ein Level. Du weißt, wo im Level Deine Figur steht. Du weißt, wo auf dem Bildschirm Deine Figur steht. Du weißt, wie breit Dein Fenster ist. Kurz: Du weißt, welchen Ausschnitt Deines Levels Du anzeigen musst.


----------



## mihe7 (4. Jan 2019)

Entfernt. Doppelpost.


----------



## Xyz1 (4. Jan 2019)

Jetzt hast Du die Chance gehabt es umzusetzen.  Sorry aber erklärt haben mihe7 und ich es.  frag uns bei gelegenheit bitte nochmal, wenn du gar keine herangehensweise weißt....


----------



## pmSave (7. Jan 2019)

ein Hinweis auf die Methode 
	
	
	
	





```
translate(int x, int y)
```
 der Klasse Graphics oder Graphics2d wäre hilfreich gewesen(wenn ihr sie überhaupt kennt)


----------



## mihe7 (7. Jan 2019)

Ein Hinweis darauf, dass es Dir nur um eine Verschiebung geht, wäre hilfreich gewesen. Dann hätte ich mir den Hinweis auf den Ausschnitt gespart.


----------



## Xyz1 (7. Jan 2019)

pmSave hat gesagt.:


> ein Hinweis auf die Methode der Klasse Graphics oder Graphics2d wäre hilfreich gewesen(wenn ihr sie überhaupt kennt)


Kann nur für mich schreiben, aber ja kenne ich.


----------



## JuKu (13. Jan 2019)

Um es mal kurz zusammenzufassen:
Swing ist für sowas eig. nicht geeignet, weil es immer alle Tiles zeichnet (unperformant) und keine Camera besitzt. Aber das nur nebenbei bemerkt.
Prinzipiell funktioniert Side Scrolling so, dass du ohne ein Kamera-Objekt (Swing) deine Tiles nach links schiebst.
Quasi verschiebst du nicht die Camera, wie es ein normales Spiel tun würde, sondern du verschiebst den Hintergrund (und alle anderen Objekte).

Also z.B.:

```
Image[][] map;//...

//current player position
int playerX = 100;

//draw map
for (int y = 0; y < map.length; y++) {
    for (int x = 0; x < map[0].length; x++) {
        //draw tile
        drawTile(map[y][x], x * tileWidth - playerX, y * tileHeight);
    }
}
```

Das Code-Beispiel ist jetzt aber frei erfunden und nicht getestet.


----------



## Xyz1 (13. Jan 2019)

JuKu hat gesagt.:


> Swing ist für sowas eig. nicht geeignet, weil es immer alle Tiles zeichnet (unperformant) und keine Camera besitzt


Und Deine Alternative wäre?


----------

