Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

progger5

unregistriert

1

24.07.2011, 03:25

Spielfeld größer als Anzeige

Hallo,

in z. B. Age of Empires ist das Spielfeld eigentlich immer größer als die Anzeige. Darum kann der Spieler sich auf der Landkarte bewegen. Wie wird so etwas theoretisch programmiert (2D-Game, isometrische Ansicht)? Mein erster Gedanke war, die Koordinaten aller Objekte im Spielfeld zu verändern, so dass eine "Kamera" nur vorgetäuscht wird. Aber ob das eine effiziente Methode wäre? Vielleicht gibt's da ja den einen oder anderen Kniff? Ich danke euch schonmal. Viele Grüße. PS: Für das Ganze habe ich vor SDL zu verwenden.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »progger5« (24.07.2011, 03:55)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

24.07.2011, 04:17

Du kannst das Spielfeld doch einfach größer machen. Beim zeichnen zeichnest du dann halt nicht ab der Koordinate (0, 0) sondern irgendwo im negativen Bereich. Oder du zeichnest halt nur den Ausschnitt der Karte, welcher grad zu sehen ist. Du verschiebst also einfach den Sichtbaren bereich auf der Karte. In etwa wie bei einer Kamera. Du kannst es natürlich auch so umsetzen, dass du dir eine Art 2D Kamera schreibst und diese dann einfach verschiebst.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

3

24.07.2011, 10:59

Wie schon geschrieben:
Warum die gesamte Spielwelt verschieben wenn du einfach nur die Camera verschieben musst.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

24.07.2011, 11:18

Naja sagen wir mal "Kamera". Habe mit SDL schon ewig nichts mehr gemacht aber gibt es da schon ne Kamera? Ansonsten muss man sich ja selbst nen System überlegen. Und ne Kamera ist ja eigentlich nur ne Abstrahierung von dem Problem. Wie er es dann Umsetzt kann er ja gucken.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

progger5

unregistriert

5

24.07.2011, 11:22

Danke für eure Antworten.

Werd nachforschen, wie es bei SDL um ne "Kamera" steht. Eventuell liest das hier ja noch jemand, der die Antwort weiß.

6

24.07.2011, 11:26

Nein,
eine Kamera gibt es da soweit ich weis nicht, hab aber auch schon Jahre nichts mehr damit gemacht.
Und so schwer duerfte das nun auch wieder nicht sein da eine einfache Kamera einzubauen.

Man kann sich ja auch einfach merken welches Tile oben links ist und das dann so berechnen, etc.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

7

24.07.2011, 11:29

Beispiel:
Die Karte ist jetzt erstmal nur ein Bild (manche machen das mit gesamten Bild, andere blitten jedes Teil für sich).
Dann legst du bspw. ein SDL_Rect in die untere linke Ecke.
Das würde dann so aussehen:
SDL_Rect rect = {0, SCREEN_HEIGHT, VIEW_WIDTH, VIEW_HEIGHT};
Die Konstanten sollten selbsterklärend sein, aber da ich gerade viel Zeit habe (muss eig. lernen):
SCREEN_HEIGHT: Die Gesamtgröße deines Fensters als y Koordinate, VIEW_* die Ausmaße des Karten Bereichs, der jeweils sichtbar sein soll.
Wenn du es nun wie bspw. bei Pokémon handhaben willst (oder wie generell viele), dass dein Charakter, oder mit was auch immer du die Karte erkunden willst, immer in der Mitte des sichtbaren Ausschnitts bleiben soll, kannst du dessen Schrittweite vom letzten zu diesem Frame einfach auf das rect auf addieren, so wird der Sichtbarkeitsbereich jeweils mit dem Spieler/Cursor/was weiß ich verschoben.
Mit Schrittweite meine ich die Differenz seiner Position im letzten Frame zu seiner Position im aktuellen Frame.
Deine Karte bzw den aktuellen View blittest du dann via SDL_BlitSurface(src, &rect, dest, NULL);

edit: Und bevor Nacho wieder rum propagiert: nimm ansonsten die SFML. Da stellt das Modul View eine etwaige Kamera dar, wie du sie suchst.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

8

24.07.2011, 11:36

ODER du nimmst eine moderne, hardwarebeschleunigte und objektorientierte Library wie die SFML und benutzt eine View. Da musst du nur größe und Position angeben und kannst sogar zoomen.
Wieso soll man es sich schwer machen wenns genau so gut einfach geht?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

9

24.07.2011, 11:37

Zitat

edit: Und bevor Nacho wieder rum propagiert: nimm ansonsten die SFML. Da stellt das Modul View eine etwaige Kamera dar, wie du sie suchst.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

10

24.07.2011, 11:39

Das hab ich wohl überlesen^^
Ich hab selbst mit der SDL angefangen (ein Tetrisclon ist fertig geworden^^) und hab danach (vor zwei Jahren) zur SFML gewechselt und es nie bereut.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige