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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

31

08.03.2011, 15:04

was auch immer, schön langsam wirds mir zu blöd ;)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

32

08.03.2011, 15:05

Das hast Du dann aber selbst zu verantworten, denn das Thema war ja schon durch.
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]

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

33

08.03.2011, 16:47

@Topic:
Ich würde eine Klasse schreiben, die die Objekte verwaltet. Das soll heißen, du kannst Objekte in der Klasse registrieren und diese speichert dann einen Zeiger, über den verschiedene Methoden der Objekte aufgerufen werden können.
Von list<> oder Ähnlichem würde ich hier abraten, da ich es so empfinde, als ob diese Container um ein vielfaches langsamer sind, als wenn man selbst mit new ein dynamisches Array erzeugt.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

34

08.03.2011, 17:14

Leider enthält diese Idee keinen Vorschlag wie die Verwaltung, das Culling und die Kollisions-Tests bei einer großen Menge von Objekten beschleunigt werden können.
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]

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

35

08.03.2011, 18:04

Doch enthält sie: dynamisches Array erzeugen und Zeiger auf Objekte darin speichern. Das Array gehört zu einem ObjectManager, der Kollisionen prüfen kann...

Aber natürlich muss man erst wissen, welche Objekte geprüft werden sollen und was die Objekte genau sind:
-Spieler mit allen Objekten
-Spieler mit bestimmten Objekten
-alle Objekte untereinander

Man könnte z.B. eine Methode implementieren, der ein Objekt übergeben wird. Diese Methode könnte dann auf Kollisionen mit anderen Objekten testen. Anhand der Position der Objekte können dann weit entfernte Objekte von vorne herein von der Prüfung ausgeschlossen werden.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

36

08.03.2011, 18:58

Genau um den Ausschluss ging es ihm. Ich denke der Grid-Ansatz wäre da wohl der einfachste. Das ist relativ simpel zu lösen und auch für Anfänger gut machbar. Da du auch selbst auf diese Idee gekommen bist, denke ich dass du dir dazu schon ein paar Gedanken gemacht hast. Also 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.“

37

08.03.2011, 19:18

Danke für die Antworten, dachte nicht dass das so viele sein wreden :).

Mit Objekten meine ich Spiel Objekte (Menschen, Raumschiffe, Häuser usw.), ich gehe mal stark davon aus dass das alles Klassen sein werden :huh:. Und 20.000 klingt zwar viel aber ich gehe von worst case aus :D, hab mal das Spiel Cossacks gespielt (Strategie) und da konnte man 5.000 und mehr Einheiten haben.

Ja so wie im letzen Post von BurningWave wollte ich das auch so machen.

Ich hab mal eine Map mit Tiles gemacht und da einbischen experementiert (wenn die Tile ausserhalb von Screen ist, soll es nicht gezeichnet werden). Da hab ich eine Map-Größe von 8000 x 6000 und Tile-Größe von 50 x 50 Pixel genommen, das waren dann 1920 Tiles insgesammt. Mit if-Methode ging die Fps-Rate dann schnell runter :( aber mit der Grid-Methode ging das sehr flüssig, kaum bemerkbar. Deswegen dachte ich, ich mach das gleiche mit den Spiel-Objekten, aber der Unterschied ist das die Objekte sich bewegen und im schlimmsten Fall steht das Objekt auf vier Feldern (vom Grid). Ich frag mich auch wie groß soll ein Feld wohl sein, wenn ein Durchschnittsobjekt 50x50 Groß ist.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

38

08.03.2011, 19:33

Von list<> oder Ähnlichem würde ich hier abraten, da ich es so empfinde, als ob diese Container um ein vielfaches langsamer sind, als wenn man selbst mit new ein dynamisches Array erzeugt.

dann empfindest du falsch. jeder container hat seine daseinsberechtigung. man muss nur wissen wann man welchen nutzen muss.
std::vector ist im vergleich zu einem mit new erzeugtem dynamischen array kaum langsamer, in manchen fällen sogar schneller
"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?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »NachoMan« (08.03.2011, 19:40)


BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

39

08.03.2011, 20:06

Ja ich finde die STL Container eigentlich auch super. Es kann natürlich sein, dass vector schneller ist, ich benutze in meinem Programm gerade eigentlich fast nur list, (multi)map und (multi)set. Das Problem ist halt, wenn du ein ganz bestimmtes Element brauchst und der []-Operator für den jeweiligen Container nicht überladen ist, braucht man ewig, bis man durch die komplette Liste iteriert ist.

jokester

Treue Seele

Beiträge: 125

Wohnort: Mainz

  • Private Nachricht senden

40

08.03.2011, 20:17

Selbst schuld, dann hast du einfach den falschen Container gewählt. Übrigens gilt in C++ immer noch: Abstraction costs nothing, std::vector wird auf ein stinknormales Array runterkompiliert. list hab ich btw seltsamerweise noch nie gebraucht.
"There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable. There is another theory which states that this has already happened" -- Douglas Adams.

Werbeanzeige