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

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

11

16.02.2011, 17:30

Ich werds erstmal mit Fred und Nachos Ansatz, also mit dem 3D Array, versuchen, da ich denke das es am einfachsten ist.

Zitat

Kommt ja auch drauf an ob du nun nen Minecraftclon erstellen willst oder was du vorhast bzw. wie der Spieler mit dieser Welt interagieren kann und wie dynamisch die Welt ist.


Die Welt soll exakt so funktionieren wie bei Minecraft, ich denke es ist für den Anfang nicht das schlechteste Projekt, natürlich wird es erstmal nicht so Umfangreich, aber Kollisionen sind nicht so kompliziert und man braucht keine 3D Modelle oder sonst was.

Vielen dank schonmal, momentan versuch ich erstmal die Steuerung zu entbuggen ^^ man kann nicht richtig "crouchen".

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

12

17.02.2011, 20:38

So, jetzt weiß ich aber nicht wie ich den Vector dazu anlege:

C-/C++-Quelltext

1
vector<vector<vector<int>>> m_map;


Und zugreifen will ich ja über m_map[3][89][5];
Wie mach ich das? Die Indecies 3, 89, 5 sind dann ja die Koordinaten x, y, z, aber was wenn ich erst einen Block mit der Position 5, 3, 2 erstellen will (oder auch nachher hinzufügen)?

13

17.02.2011, 21:35

du musst als nächstes den Vectoren die richtige Größe geben. Der äußere braucht die Dimension in X Richtung, der innere die inneren alle die in Y Richtung und die inneren in den inneren alle die Größe in Z Richtung. Also vermutlich 2 Schleifen ineinander.
Dann kannst du sowas wie m_map[4][5][8]=7; machen.
Lieber dumm fragen, als dumm bleiben!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

14

17.02.2011, 22:01

die lösung mit dem dreifach verschachtelten std::vector ist sehr unschön.
du könntest dir ne eigene klasse schreiben die das 3d array kapselt. dann musst du über eine methode anstelle der indizierungsoperatoren auf die elemente zugreifen.
gibt es mit sicherheit schon. vielleicht findest du ja was fertiges.
"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?

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

15

17.02.2011, 22:52

@NachoMan

Meinst du also eine Klasse die z.B. drei Vectoren enthält für x, y, z? Und evt. zusätzlich dann noch einen für die ID des Blocks? Kann mir das gerade nicht gut vorstellen :)

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

16

17.02.2011, 23:05

ich meine eine klasse die einen vector mit der größe höhe*breite*tiefe hat. in der zugriffsmethode berechnest du die position im vector und gibst eine referenz zurück.
damit brauchst du keine verschachtelten schleifen zum initialisieren usw. reservierst den speicher also auf einen schlag
"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?

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

17

18.02.2011, 13:08

Ok, ich werds versuchen umzusetzen

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

18

18.02.2011, 22:26

Ok, ich glaub ich habs noch nicht ganz verstanden:

1. Ich erstelle einen Vector mit ints Größe ist gesamt_x*ges_y*ges_z.
2. Ich berechne für jeden Block den Index nach folgendem Muster:

(5x5x5 Karte):

0 | 1 | 2 | 3 | 4
5 | 6 | 7 | 8 | 10
11|12 | ...

Das ganze mal 5 in der Höhe, so jetzt kann der erste Block ja den Index 0 für (0|0|0) haben.
Der nächste (Index = 1) hätte dann z.B. (1|0|0). Berechnung x+... z würde sich dann ja auf die "Reihe" beziehen
und ...z*5 haben.

Bei dem 1,0,0 Beispiel: 1+0*5 = 1

y nehme ich dann ja dazu indem ich die Größe einer Ebene (x*y) multipliziere:

x+z*5+(5*5)*y

Ist das so richtig um den kompletten Vector zu füllen? Testweise funktioniert das so wenn ich z.B. eine 10x10 Map erstelle werden auch tatsächlich alle Zahlen von 0 bis 99.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DeKugelschieber« (19.02.2011, 12:36)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

19

18.02.2011, 22:38

die berechnung sieht bei mir so aus: m_Height*m_Depth*x+m_Depth*y+z
allerdings hab ichs nur für würfel getestet. sollte trotzdem funktionieren.
achja, height liegt bei mir auf y ebene, width auf x und depth bei z.
"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?

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

20

19.02.2011, 11:02

Ja als Würfel reicht ja ;) wo nichts ist kommt dann halte eine 0 hin.

Werbeanzeige