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

pFreak

Frischling

  • »pFreak« ist der Autor dieses Themas

Beiträge: 6

Wohnort: Essen

Beruf: Ausbildung zum Fachinformaiker (Anwendungsentwicklung)

  • Private Nachricht senden

1

16.07.2012, 10:49

Konzeption einer Jump&Run-Welt

Schönen guten morgen,

da ich momentan etwas Zeit habe, wollte ich mich mal wieder mit der Entwicklung von Spielen beschäftigen.
Ich fand dieses Thema schon immer unheimlich interessant und denke nun langsam, dass ich auf einem Level angekommen bin, wo ich mich mit dem Thema wieder beschäftigen kann, ohne völlig zu versagen.

Und zwar möchte ich mit einem Jump&Run anfangen. Nun frage ich mich, wie ich diese Welt am besten strukturieren sollte.



Ich möchte das Terrain Block-Artig gestalten und habe folgende Idee gehabt, wie ich das am besten umsetze:

Ich habe ein 2-Dimensionales Array, dass mit Bytes gefüllt ist. Das Byte beschreibt die Blockart (0: Luft, 1: Stein, 2: Erde) und die 2 Indexe die X und Y-Coordinate (array[X][Y]). Dieses Array wird statisch, damit ich von überall darauf zugreifen kann.
Es gibt dann eine statische Block-Klasse, von der die Blockarten (Stein, Erde) ableiten und somit Eigenschaften erhalten können (Grafik usw).

Eine weiter statische Klasse dient dazu, die Bytes einer Blockklasse zuzuordnen.

Ein kleines Beispiel, wie der Block auf der "Matrix-Position" 23,24 gezeichnet werden kann (Java-Code):

C-/C++-Quelltext

1
g.draw(BlockFactory.getBlock(World.world[23][24]).getImage());



Jetzt meine Frage: Wie sieht der traditionelle Lösungsweg hierzu aus? Ich habe null Erfahrung mit dieser Thematik und würde einfach gerne wissen, wie ihr es lösen würdet.
Des weiteren würde mich interessieren, ob es generell Artikel zu diesem Thema gibt, damit ich mich damit beschäftigen kann.

Ich würde mich über Antwort freuen
MFG

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

16.07.2012, 11:09

Also bei "statischen" Klassen kräuseln sich mir die Nackenhaare, generell aber ein brauchbarer Ansatz die Tiles über IDs zu referenzieren. Von einem statischen Array würde ich ganz dringend abraten. Übergib ihn vernünftig als Parameter an die entsprechenden Klassen oder Methoden.
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]

pFreak

Frischling

  • »pFreak« ist der Autor dieses Themas

Beiträge: 6

Wohnort: Essen

Beruf: Ausbildung zum Fachinformaiker (Anwendungsentwicklung)

  • Private Nachricht senden

3

16.07.2012, 11:45

Also bei "statischen" Klassen kräuseln sich mir die Nackenhaare, generell aber ein brauchbarer Ansatz die Tiles über IDs zu referenzieren. Von einem statischen Array würde ich ganz dringend abraten. Übergib ihn vernünftig als Parameter an die entsprechenden Klassen oder Methoden.






... Und was ist mit einem Singleton? :D
Nein ich muss mal überlegen, wie ich das umsetze, aber ich sehe noch nicht, wo das Problem dabei ist, von überall auf diese Welt Zugriff zu haben.

Danke für die schnelle Antwort.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »pFreak« (16.07.2012, 11:57)


David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

16.07.2012, 11:59

Nein ich muss mal überlegen, wie ich das umsetze, aber ich sehe noch nicht, wo das Problem dabei ist, von überall auf diese Welt Zugriff zu haben.


Überleg dir lieber ob du überall Zugriff benötigst. Und wenn du diese Frage mit "ja" beantwortest dann denk nochmal genau darüber nach. Ich bin mir sicher, dass der globale Zugriff nicht notwendig ist!
@D13_Dreinig

pFreak

Frischling

  • »pFreak« ist der Autor dieses Themas

Beiträge: 6

Wohnort: Essen

Beruf: Ausbildung zum Fachinformaiker (Anwendungsentwicklung)

  • Private Nachricht senden

5

16.07.2012, 12:07


Überleg dir lieber ob du überall Zugriff benötigst. Und wenn du diese Frage mit "ja" beantwortest dann denk nochmal genau darüber nach. Ich bin mir sicher, dass der globale Zugriff nicht notwendig ist!



Da hast du recht.
Also werde ich das ganze nicht statisch gestalten und schön brav mir mein Array durch die Funktionen reichen, wenn ich es benötige.
Aber sonst ist das Konzept in Ordnung, oder gibt es da noch Punkte, die mir das Genick brechen werden.
Und noch einmal zu meiner anderen Frage: Kennt jemand eine Quelle, wo ich mir das ein wenig besser aneignen kann, oder soll ich mir alles selber ausdenken. Ist sicherlich lehrreicher, aber ich will nicht immer alles über den Haufen schmeißen müssen, weil ich Mist gedacht habe.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

16.07.2012, 12:28

Da wirst Du auf Dauer ohnehin nicht rund rum kommen. Das passiert selbst in Projekten mit vielen erfahrenen Leuten. Oft fallen solche Passus erst viel zu spät auf, wenn ein bis dahin nicht geplantes Feature eingebaut werden muss. Von fehlender Erfahrung und mangelndem Weitblick mal ganz abgesehen.
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]

pFreak

Frischling

  • »pFreak« ist der Autor dieses Themas

Beiträge: 6

Wohnort: Essen

Beruf: Ausbildung zum Fachinformaiker (Anwendungsentwicklung)

  • Private Nachricht senden

7

16.07.2012, 14:06

Ok, ich werde mich mal versuchen.

Eine Frage habe ich allerdings noch, die mir unter den Fingern brennt:
Ich möchte ja, dass mein "Player" sich nicht nur in meiner 2-Dimensionalen Matrix, sondern auch "zwischen den Blöcken" laufen kann.
Das heißt er kann zwischen 2 Blöcken stehen bleiben und nicht mit jedem Schritt einen Block weiter springen. Wie soll ich das umsetzen?
Soll ich die Playerposition einfach als Float definieren und somit dann zwischen den Blocken laufen können (X:2 Y:4, dann kann der player auch auf X:2,4 Y:4 stehen), oder wie setze ich das am besten um?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

16.07.2012, 14:12

Ja, nimm floats.
Am einfachsten machst du es so, dass (0, 0) in der Mitte unten der Spielfigur ist (also bei den Füßen).
Wenn du dann herausfinden willst, ob der Spieler auf einem Block steht, prüfst du die Felder (X: (int)(px - 0.25f), Y: (int)py) und auch (X: (int)(px + 0.25f), Y: (int)py), wenn der Spieler 0.5 Einheiten breit ist.
Beim Laufen musst du dann auch über die ganze Höhe des Spielers nach Hindernissen prüfen auf der jeweiligen Seite, wohin du laufen willst.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

16.07.2012, 14:15

Jeder Block hat doch vermutlich eine Breite. Damit ist das Rätsel dann auch schon gelöst. Ein Spieler befindet sich an einer Position, nicht an einem Block. Jede Position lässt sich aber genau einem Block zuordnen.
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]

pFreak

Frischling

  • »pFreak« ist der Autor dieses Themas

Beiträge: 6

Wohnort: Essen

Beruf: Ausbildung zum Fachinformaiker (Anwendungsentwicklung)

  • Private Nachricht senden

10

16.07.2012, 14:17

Danke für die Antworten, ist mir gerade auch so aufgefallen.
Ich versuch mal was umzusetzen. :)

Werbeanzeige