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

1

23.02.2016, 21:42

Rollende 2D-Welt

Halli hallo,


ich muss ganz ehrlich zugeben, dass ich nur sehr oberflächlich und kurz (rund eine halbe Stunde) geschaut habe.... allerdings bin ich in diesem Bereich komplett blank und weiß nicht, nach welchen Stichwörtern ich geschickter Weise suchen sollte (Dinge, die ich schon gefunden habe, waren alle nicht so direkt, was ich gesucht habe)...


Vorab:
Ich studiere Informatik, noch ohne konkrete Vertiefung wird aber mittelfristig wohl in die Bereiche Softwaretechnik und Data-Science gehen.


Entgegen der allgemeinen Weisheit "Don't reinvent the wheel." würde ich gerne ein simples Spiel mit einer rollenden, spielerzentrierten, 2D Map schreiben - also in einem Stil der mit üblichen GameBoy-Adventures vergleichbar ist (Zelda, Pokémon, ...).

Ich habe den Beitrag 2D-Engine zwar gefunden, das ist aber (zur Zeit) nicht direkt was ich suche.


Es geht mir im Wesentlichen darum, was für solche rollenden Karten die best-practices sind, die man beachten sollte:
a) sinnvolles Verwalten der Karten/Grafik-Elemente (alles im Speicher, nur Teile im Speicher und ad-hoc Zugriffe auf kleine Datenbank, ...)
b) so aus dem Bauch raus würde ich mir bei so einfachen Geschichten das Rollen der Karte vorstellen, in dem ich eine Koordinate im Fokus habe und wenn die sich ändert die Grafikelemente aktualisieren - das klingt nur in meinem Hirn ein wenig ineffizient, insbesondere wenn man mehr als 1 Schritt am Stück macht. Andererseits müssten dafür lediglich ein paar Referenzen umgetragen werden, was eigentlich ja rasent schnell geht...

Nachdem ich in Java am fittesten bin würde ich das gerne in Java umsetzen, mit einem FX-Interface bevorzugt, aber wegen mir auch Swing.

LibGDX habe ich gesehen, würde nachdem ich aber gerne "mehr über Räder" lernen möchte, würde ich die Mechanik gern selbst implementieren und auf die zusätzliche Features und Dependencies verzichten wollen.


Im Zweifel freue ich mich auch sehr, wenn jemand der erfahrener ist einfach mehrere Links zu Posts oder Onlinetutorials, die solche best-practices beschreiben ohne weiteren Kommentar ablegen würde...

Ich weiß, dass selbst Suchen bei sowas der bessere Stil wäre, aber ich habe tatsächlich keine Ahnung, nach was ich da sinnvoller Weise suchen müsste...



Und ja, mir ist klar, dass C++ bei Ansteuerung von Graphik/allgemeinen Hardwaregeschichten wesentlich performanter ist als Java und sicherlich nochmehr als die XML/CSS getouchten FX Anwendungen, aber für das was ich vorhabe ist mehr als ausreichend effizient, daher würde ich gerne für das Verdienen meiner ersten Sporen bei meiner "Muttersprache" bleiben und wenn das dann mal steht die Fühler zum Lernen der anderen C-Töchter ausstrecken.


Gruß
kratl

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

24.02.2016, 06:57

Was genau meinst Du mit "rollen"? Einfaches Scrolling? Da bewegt man eigentlich überhaupt nichts außer der Kamera (sprich den Sichtbereich) und die Spielfigur. Eigentlich macht man das generell so.
a) Alles im Speicher, sofern es passt
Du willst außerdem ganz sicher kein Swing oder andere UI-Libraries von Java, Du willst OpenGL (da gibt's auch Java-Bindings). Alles andere ist viel zu langsam - ob Du das nun glaubst oder nicht - sie einfach unfassbar langsam. Allerdings lernst Du mit OpenGL mMn weniger über Räder und mehr über Getriebe, Zündkerzentakte und Einspritzmechanik.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

24.02.2016, 10:06

Hm, die Frage kann ich so zurück geben: was meinst du mit Scrollen? ;-)


Mit rollender Welt meine ich wie gesagt so etwas wie bei den Pokémon GameBoy-Adventures:
-> Die Ansicht ist Spielerzentriert
-> wenn man ein Event sendet (bspw. NUMPAD_UP) dann geht die Spielfigur einen Schritt "aufwärts" und der sichtbare Teil der Welt wird dabei um 1 Koordinate aufwärts (oder abwärts, je nachdem wo 0,0 aufgehängt ist) in Y-Richtung bewegt.
--> Hält man die entsprechende Taste gedrückt, dann wird das Event immer wieder gehört und es findet eine gleitende (mit dem menschlichen Auge noch sinnvoll verarbeitbar langsame) Bewegung in die entsprechende Richtung nach


Also im Gegensatz beispielsweise zu Spielen wie (zumindest den ersten Teilen von) Myst, in denen man irgendwo hinklickt und dann die Welt an einem festgelegten Referenzpunkt geladen wird.


Hm... dann schaue ich mir OpenGL mal an, aber irgendwie würde ich trotzdem gerne mal meine eigenen Räder probieren, auch wenn die dann etwas klobig und java-esk sind.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

24.02.2016, 10:25

Was du beschreibst nennt sich Scrollen. Kennt man z.B. auch aus dem Browser.
Beispiel auch in:

Die Kamera wird immer auf den Ball zentriert (sofern möglich - siehe Level-Grenzen). Dabei wird die Welt nicht angefasst, die Elemente behalten alle ihre alte Position, nur der sichtbare Ausschnitt verschiebt sich. Was sich bewegt, sind Ball und Kamera.

Java-esk ist kein Problem, nur ist wie OpenGL eben wirklich schon sehr low-level, was ich unnötig komplex finde für einen Einstieg.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

24.02.2016, 11:03

Ok, und schon etwas gelernt - danke :-)


Hm... wenn du das zu komplex für einen Einstieg findest, warum schlägst du es dann vor?

Oder ist der Umkehrschluss an dieser Stelle, dass es leider auch keine weniger komplexe Variante gibt?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

24.02.2016, 12:20

Du hast es ja selbst schon genannt. LibGdx wäre gut geeignet. Tu dir das nicht an am Anfang alles selbst machen zu wollen. Dein Ziel ist ja grad ein Spiel. Dann versuch dich am besten auch erst mal daran. Danach kannst du dir immer noch angucken wie du die darunter liegenden Schichten selbst implementieren kannst.
Was deine Welt angeht, da kannst du mal nach Tile Map suchen. Du beschreibst dass die Welt sich bewegen soll. Das kann man so umsetzen, ist aber nicht besonders schön. Wie BlueCobold schon beschreibt gibt es dafür das Prinzip der Kameras. In LibGdx gibt es so etwas schon fertig. Musst du natürlich nicht benutzen, sondern kannst dir das auch selbst implementieren. Wobei ich auch hier erst mal auf fertiges setzen würde.
Viel Erfolg
„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.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

24.02.2016, 13:12

Hm... wenn du das zu komplex für einen Einstieg findest, warum schlägst du es dann vor?
Weil Du das selbst so wolltest:
LibGDX habe ich gesehen, würde nachdem ich aber gerne "mehr über Räder" lernen möchte, würde ich die Mechanik gern selbst implementieren
Wenn Du tiefer gehen willst als LibGDX, dann landest Du bei OpenGL.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

8

24.02.2016, 21:09

Ich geb dir ein Tip. Erfinde das Rad später neu. Arbeite erstmal mit paar Technologien. Libgdx ist denke ich nicht schlecht für den Anfang. Da kannst du auch in die Klassenbibliothek reinschnuppern wenn du mehr erfahren willst.

Lerne erst von den Großen.

Aber wenn du es from scratch machen willst.
-Matrizen
-Kamera
-Displayliste

das sind paar Schlagwörter.

Viele denken als Anfänger, dass sie am Besten Bottom-Up gehen sollten. Oft ist Top-Down viel geeigneter. Oder so Mitte nach unten oder Mitte nach oben ein wenig. Naja.

Arbeite mit Libgdx. Das ist sehr einfach. Und glaub mir. Du lernst genug und hast auch genug zu tun. Denke das ist schon Low-Level genug für den Anfang.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

9

24.02.2016, 23:28

Daraus, dass du dir Gedanken über eine Implementierung einer scrollenden Kamera machst, schließe ich, dass du noch nicht viel Erfahrung mit der Spieleentwicklung hast. Entsprechend wäre ein Einstieg "weiter oben" mit LibGDX besser, wozu dir hier schon einige geraten haben.
Bei der Implementierung kann ich mich nur BlueCobold anschließen: die Umgebung bleibt im Speicher an der gleichen Stelle und die Kamera wird verschoben. (Erweitern kann man das noch um Grenzen, über die der sichtbare Bereich nie hinaus gehen soll, weiche/interpolierte Kamerabewegungen, dynamischer Zoom, bspw. für die Verfolgung mehrerer Objekte (wenn es für das Spiel relevant ist) usw.)
Neben diesen "Kleinigkeiten" wird man, wenn man denn ein Spiel entwickeln will, sehr wahrscheinlich auch auf das Problem stoßen, dass man sein Spiel auch mit Inhalt (Grafiken und Animationen, Sounds, Feinde/Obstacles, Level, Story, (Partikel-)Effekte, ...) füllen muss. Auch wenn man noch so gut programmieren kann, heißt das nicht, dass man auch geeigneten Inhalt für sein Spiel schaffen kann.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

10

26.02.2016, 21:15

Um mal in deiner Rad-Analogie zu bleiben: du möchtest ein eigenes Rad entwickeln, ohne dass du jemals ein Rad gesehen oder mit einem Rad gearbeitet hast.
Die Wahrscheinlichkeit, dass bei deinen ersten Schritten mit OpenGL also ein vernünftige Rad rauskommt, was rund läuft, ist also ziemlich gering. Viel Cleverer ist es erst einmal ein paar andere Räder zu testen -- zum Beispiel LibGDX für Java, damit du herausfinden kannst, was ein gutes Rad ausmacht, bzw. was du dir gerne wünschen würdest. Wenn du dann einige Erfahrung hast und immer noch Interesse hast, dann wird es viel sinnvoller sein, sich mit OpenGL zu beschäftigen und die relevanten Aspekte selbst zu implementieren. Aber dazu sollte man erst einmal wissen, was man überhaupt haben möchte ;).

Zur Welt-Thematik. Es gibt grundsätzlich natürlich auch Ansätze, in denen die Welt bewegt wird, allerdings ist das nur selten wirklich sinnvoll. Wenn du viele dynamische Objekte (Gegner, Items etc.) hast, dann gehören die ja zur Welt und müssen mitbewegt werden, was sehr aufwändig werden kann.In der Regel ist es denke ich einfacher, einfach nur den Spieler zu bewegen. Die Bewegungsrichtungen sind da auch intuitiver als wenn du die ganze Welt bewegen würdest.

Werbeanzeige