Verkette Listen
-
HI!
Ich hab mir vor einiger zeit das buch opengl gameprogramming gekauft;
durchgelesen - ab seite 400 irgendwas nichts mehr verstanden
wieder durchgelesen, halbwegs kapiertich hab jetzt aber eine frage bezüglich der CNode (Verkette Liste) Klasse.
Ich will jetzt einen Schuss (in meinem Fall ein Billboard) erzeugen, also hab ich mir gedacht, ich mache einfach eine Klasse mit dem Namen
CBullet;
okay, ein Schuss ist ein Objekt, also
CBullet : public CObject
und CObject erbt von CNode, also können alle Kugeln zusammengefasst werden. Aber dann sind ja eigentlich alle Kugeln Childs, und ich würde nicht kapieren warum eine Kugel der/die/das Parent sein sollte, es muss aber wohl ein übergeordnetes Objekt geben, das die ganzen Schüsse, oder halt Childs rendert, animiert usw.
Natürlich würde es auch ohne eine verkette liste gehen und ich könnte es einfach so in der art machen:if (keys[VK_SPACE] || lmouse && bullets<9999) { schuss[bullets].vDir = player.vDir; schuss[bullets].setPosition(player.vCenter); bullets++; } for (int x=0; x<bullets;x++) { schuss[x].Position (-schuss[x].vDir.v[0]/divider, -schuss[x].vDir.v[1]/divider, -schuss[x].vDir.v[2]/divider); schuss[x].Render(); }
Aber so ist es ja umständlich und ich kann die kugeln nicht, wenn sie einen gewissen abstand zum spieler erreicht haben wieder löschen.
Also meine Frage: Wie kann ich "Schüsse" verarbeiten?
thx im vorraus, bin für jede hilfe dankbar
-
Eh, was meinst du jetzt ?
Nach dem was ich verstanden habe, sind vielleicht templates am geeignetesten für dich
-
ich wüste nicht weshalb cbullet von Cnode abgeleitet sein sollte, cbullet erbt von cobjeckt (ich würde für sichbare objeckte ne basisklasse wie z.B. CRenderable machen)
an jede node würde ich dann renderables stecken (also in class CNode einen pointer auf CRenderable)
diese würde ich dann als verkettete liste aufbewaren.CNode wäre dann eigentlich das parent und alles was gerendert werden kann kann an der node hängen in einer verketteten liste (weil die CNode ja nicht vorher mit ausreichend pointern initialisert werden kann weil man die pointeranzahl nicht weißt, die man später brauchen würde)
also das würde dann eventuell in einem scenengraphen so aussehen:
CNode
/ \
CNode CNode - CRenderable - CRenderable - CRenderable - CRenderablehoffe ich hab deine frage richtig verstanden und auch somit gut beantwortet
rapso->greets();
-
@rapso
Danke erst mal für die schnelle antwort, aber ich weiß nicht ob ich dich richtig verstanden habeaber wenn:
Ist der Name Node dann nicht irreführend?
So wie du es beschrieben hast wäre das wohl eher der Objectmanager?!cu