JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=8ef9a3bf44446c7bc89b2810965abda5Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Unbekannte Anzahl von Obekten verwalten.
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Clythoss
Junior JLI'ler


Alter: 44
Anmeldedatum: 04.05.2005
Beiträge: 64
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 25.03.2006, 16:27    Titel: Unbekannte Anzahl von Obekten verwalten. Antworten mit Zitat

Ich weiß nicht ganz wie ich die Frage stellen soll. Ich versuch mich ja grad in C++ einzuarbeiten. Da hat man ja die Möglichkeit alles mögliche als Objekt zu schreiben, aber wie stellt man Sicher das alle Objekte auch Ordnungsgemäß verwaltet werden?

Ich versuch mal ein Beispiel. Ich hab ein Asteroids Clone wo wenn ich einen Großen Asteroiden zerstöre er in eine rufällige Anzahl von 3-6 mini Asteroiden zerfällt. Sprich ich rufe eine RND Funktion auf und erstelle dann per schleife die Objekte. Wie stell ich denn sicher das von jedem Obejekt dann auch die draw Methode aufgerufen wird? Ich kann mir nicht vorstellen das ich beim coden drauf spekulieren muss. So nach dem Motto If exist MiniAsteroid5 dann draw. Ich wüsste auch nicht wie ich mir dann die Technik eines Leveleditors vorstellen soll wo man ja auf jeden Fall vorher nicht weiß welche Objekte existieren werden. Ich hoffe ihr habt verstanden was ich meine und könnt mir helfen. Danke.
_________________
Derzeitiges Projekt : Wing Fusion
Status: Es geht vorwärts...

-------------------------------------------------------
E=MC²+1W6
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 25.03.2006, 16:39    Titel: Re: Unbekannte Anzahl von Obekten verwalten. Antworten mit Zitat

Clythoss hat Folgendes geschrieben:
Ich weiß nicht ganz wie ich die Frage stellen soll. Ich versuch mich ja grad in C++ einzuarbeiten. Da hat man ja die Möglichkeit alles mögliche als Objekt zu schreiben, aber wie stellt man Sicher das alle Objekte auch Ordnungsgemäß verwaltet werden?

Ich versuch mal ein Beispiel. Ich hab ein Asteroids Clone wo wenn ich einen Großen Asteroiden zerstöre er in eine rufällige Anzahl von 3-6 mini Asteroiden zerfällt. Sprich ich rufe eine RND Funktion auf und erstelle dann per schleife die Objekte. Wie stell ich denn sicher das von jedem Obejekt dann auch die draw Methode aufgerufen wird? Ich kann mir nicht vorstellen das ich beim coden drauf spekulieren muss. So nach dem Motto If exist MiniAsteroid5 dann draw. Ich wüsste auch nicht wie ich mir dann die Technik eines Leveleditors vorstellen soll wo man ja auf jeden Fall vorher nicht weiß welche Objekte existieren werden. Ich hoffe ihr habt verstanden was ich meine und könnt mir helfen. Danke.

naja, so wirklich hab ich das net verstanden, aber ich kanns mir ungefähr denken. Also, wenn man die Anzahl net vorher weiß, sondern wenn sie erst während dem Spiel errechnet wird, nimmt man dynamische Arrays - sprich du benutzt new und delete. Falls du zwar 3 Objekte haben willst, später aber noch neue dazukommen können, nimmt man die STL, dazu haben wir hier auch ein Tutorial.

zu deiner eigentlichen Frage, in pseudocode vllt so:
CPP:
anzObj = rand()%4+3; // für 3 - 6
tempObj = new cObj[anzObj]; // dynamisches Array mit der zufälligen Objanzahl
for(long i=0; i<anzObj; ++i)
{
     tempObj[i]->Draw()
}

Du musst halt die Objektanzahl mitspeichern. Gibts da irgendwelche Vertändnisprobleme? Wenn net, hoffe ich, dass ich dein Problem verstanden hab Wink

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 25.03.2006, 17:01    Titel: Antworten mit Zitat

Dynmaische Array gehen zwar, aber eignetilch sind die Mist Wink

Ne STL Liste ist viel schöner. Also:
Du ahst Asteroiden. Dann machst du einfach eine Asteroiden Klase mit Move und Render funktion und was die sonst noch alles können müssen.
Dann machst du eine neue Klase, AsteroidenManager. Der speichert intern eine stl::list aus Asteroidenobjekten (am besten Zeiger auf dynamisch erstellte Asteroiden felder, dann brauchst du dich nicht um Kopierkonstruktior und so zu kümmern).
Der AsteroidenManager hat auch eine Move und eine Renderfunktion. Diese beinhaltet im Prinzip nur eine Schleife (siehe FAQ "Wie durchläuft man am besten eine STL List?") welche jeweils die Move und Renderfunktionen der Asteroidenobjekte aufruft.

Der Asteroiden Manager hat zum Beispiel auch eine Funtkion TestKollision. Wenn das Playerobjekt einen Zeiger auf den AsteroidenManager hat, kann es damit sehr leicht prüfen ob es beim bewegen einen berührt und wenn ja halt explodieren.

So in etwa mach ich das bei meinen spielen, es geht sicher auch anders, aber ich komme damit bestens zurecht.
Statt ner STL__list kann man auch eine map nehmen oder halt ein dynamisches Array. Man muss halt die unterschiede kennen. Zum durchlaufen ist list gut und die hat den Vorteil das man die Größe schnell ändern kann und auch was aus der mitte rauslöschen kann. map solltest du halt nehmen wenn du nach einem bestimmen Objekt oft suchen musst, was nicht so häufig vorkommt. Dynamisches Array hat halt das Problem das die Größe relativ statisch ist, und nur durch vile kopieren geändert werden kann. Dafür haste aber superschnellen Zugriff auf ein nummeriertes Element, aber wenn du es eh immer komplett durchläufst soltle list gleich gut sein.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 25.03.2006, 17:13    Titel: Antworten mit Zitat

@Jona
ich meinte auch _nicht_ dass man dynamische Array oder std::list bzw. jeden anderen Container miteinander vergleichen sollte, sondern: wenn die Größe des Arrays im Spiel an der Setlle der Erzeugung eindeutig festegelegt werden kann, sprich dass keine Elemente dazukommen oder wegehen sollen, die Größe also net überschritten werden wird und keine Arraygrenzenüberschneidung vorkommen wird, dann nimm dynamische Arrays. Wenn die Größe des Arrays oft variiert, also ein Element dazukommen kann und mal eins zerstört wird, dann nimm die stl-container. Wink Rolling Eyes

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Chriss
Senior JLI'ler



Anmeldedatum: 18.08.2004
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 25.03.2006, 22:13    Titel: Antworten mit Zitat

Hi Clythoss

falls du das Buch hast schau mal nach Vectoren. Das sind von der Benutzung her dynamische arrays denen du nachträglich beliebig viele Elemente hinzufuegen und sie auch vieder entfernen kannst. Zudem wird eine funktion mitgeliefert die dir sagt wie viele Elemente drinn sind.

Oder such in der MSDN nach std::vector
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Clythoss
Junior JLI'ler


Alter: 44
Anmeldedatum: 04.05.2005
Beiträge: 64
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 26.03.2006, 08:37    Titel: Antworten mit Zitat

@DirectXer

genau das wollt ich eigentlich nicht machen Wink hab das wohl etwas unklar formuliert.

@Jonathan_Klein

Auch wenn ich nicht so etwas wie eine List als Lösung vor meinem geistigen Auge hatte, macht sie aber im Endeffekt genau das was ich eigentlich will. Werd ich mir anschauen...

@all

Danke für die Hilfe.
_________________
Derzeitiges Projekt : Wing Fusion
Status: Es geht vorwärts...

-------------------------------------------------------
E=MC²+1W6
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 26.03.2006, 11:21    Titel: Antworten mit Zitat

Clythoss hat Folgendes geschrieben:
@DirectXer

genau das wollt ich eigentlich nicht machen Wink hab das wohl etwas unklar formuliert.

Naja, kommt eben immer auf dein Vorhaben an, was du nimmst. MAn könne sagen, nimm immer ne list, da die alles kann was ein dynamisches Array auch kann, aber das hat einen entscheidenden nachteil: einfache dynamische Arrays sind, wenn man sie dann benutzt wann man sie benutzen kann, viel schneller. Also, sollte man sich immer vorher klarmachen Smile

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 26.03.2006, 15:27    Titel: Antworten mit Zitat

Das ist so nicht richtig, grade wenn du sehr oft neue Elemente erzeugst oder alte löschst sind dynamische Arrays lahm, da du i.d.R. das ganze Array kopieren musst. Bei einer List wird lediglich ein Zeiger geändert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 26.03.2006, 16:11    Titel: Antworten mit Zitat

GreveN hat Folgendes geschrieben:
Das ist so nicht richtig, grade wenn du sehr oft neue Elemente erzeugst oder alte löschst sind dynamische Arrays lahm, da du i.d.R. das ganze Array kopieren musst. Bei einer List wird lediglich ein Zeiger geändert.

hab ich das denn behauptet? Les dir mal meinen Post und den davor von mir nohcmal durch, dann siehst du, dass ich geschrieben habe: Man sollte dynamische Arrays nur benutzen, wenn die Größe des Arrays nicht variiert sondern vorher feststeht. d.h. dass keine Elemente gelöscht werden, keine neu hinzukommen und die gesamtanzahl vorher feststeht Razz

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 26.03.2006, 16:33    Titel: Antworten mit Zitat

Cool

Aber was für ein Sinn macht dann eine 'dynamische' Lösung?

Btw.: Man möge mir vergeben, dass ich nicht immer weiß, wann hier wer, was mal gepostet hat. Razz
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 26.03.2006, 19:40    Titel: Antworten mit Zitat

Er meint wohl, wenn die Zahl zwar vorher noch nicht feststeht, aber sich nach dem erstellen des Arrays nicht mehr ändert.
Wird wohl eher selten eingesetzt, aber möglich wäre es, dass man die Anzahl der Elemente per rand() festlegt, aber hinterher nichts mehr an der Elementzahl schraubt...
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 27.03.2006, 16:34    Titel: Antworten mit Zitat

@GreveN:
^^, schon verziehen Cool

@TLOP
och, das kommt bei mir seeeeeehhhhhhhr häufig vor. z.B. hier: du hast eine Terrainengine und ein User oder du schreibt/schreibst in eine .ini Datei von außen eine Anzahl an Landschaften oder so. Dazu kannst du beim Erstellen die Anzahl noch net festlegen, sondern erst beim auslesen der Datei. Ab da ändert sich diese dann aber auch net mehr Razz
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 27.03.2006, 16:59    Titel: Antworten mit Zitat

DirectXer hat Folgendes geschrieben:
@TLOP
och, das kommt bei mir seeeeeehhhhhhhr häufig vor. z.B. hier: du hast eine Terrainengine und ein User oder du schreibt/schreibst in eine .ini Datei von außen eine Anzahl an Landschaften oder so. Dazu kannst du beim Erstellen die Anzahl noch net festlegen, sondern erst beim auslesen der Datei. Ab da ändert sich diese dann aber auch net mehr Razz

Gut...überzeugt Razz

Meinst du mit "Anzahl an Landschaften" sowas wie Anzahl der verschiedenen Tiles (oder bei nicht-tilebasierten Lösungen Anzahl der verschiedenen Landschaftsteile)?
<pingelig>
Und was machst du, wenn während dem Spiel ein neues Landschaftsteil dazu kommt? Twisted Evil
</pingelig>
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 27.03.2006, 17:03    Titel: Antworten mit Zitat

The Lord of Programming hat Folgendes geschrieben:

Meinst du mit "Anzahl an Landschaften" sowas wie Anzahl der verschiedenen Tiles (oder bei nicht-tilebasierten Lösungen Anzahl der verschiedenen Landschaftsteile)?

genau diese, bei mir z.B. Tiles. Kommt dann aber auch auf die Texturanzahl an, die man auch in die Datei schreiben könnte, und noch viele mehr...

The Lord of Programming hat Folgendes geschrieben:
<pingelig>
Und was machst du, wenn während dem Spiel ein neues Landschaftsteil dazu kommt? Twisted Evil
</pingelig>

naja, bei mir kommt kein neues hinzu, ich hab nen einfachen terrainrenderer. Und selbst wenn mal ein neues hinzukommen würde, das wäre so selten, da würde das eine Hin un Her Kopieren gar net auffallen Cool

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 27.03.2006, 17:07    Titel: Antworten mit Zitat

DirectXer hat Folgendes geschrieben:
The Lord of Programming hat Folgendes geschrieben:
<pingelig>
Und was machst du, wenn während dem Spiel ein neues Landschaftsteil dazu kommt? Twisted Evil
</pingelig>

naja, bei mir kommt kein neues hinzu, ich hab nen einfachen terrainrenderer. Und selbst wenn mal ein neues hinzukommen würde, das wäre so selten, da würde das eine Hin un Her Kopieren gar net auffallen Cool

Gruß DXer

<noch mal pingelig>
Aaaha...
Und würde es dann auffallen, wenn du die Zahl ganz einfach schon im Programm festlegst und ein statisches Array benutzt? Twisted Evil
Der Geschwindigkeit&Verwaltung würde es sicher auffallen Wink
</noch mal pingelig>
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum