gast
-
hi!
wieso funktioniert folgender code nicht:if(keys[VK_SPACE]){ //Eine Kugel erzeugen und abschießen CBillboard *Kugel = new CBillboard; Kugel->Load(); Kugel->Position(Camera->vPos); Kugel->mDir = -(Camera->vDir); Kugel->ClearFlags (OF_STATIC); SceneManager->AddObject (Kugel); }
ich will damit, jedes mal wenn ich auf space drücke ein neues objekt erzeugen und das dann zu meinem scenemanager hinzufügen und von ihm verwalten lassen.
aber es funktionier nur für ein object ...
brauch ich einen pointer auf einen pointer? wie muss ich das dann machen??
-
*g* ich hab das thema und den namen verwechselt
-
wie sollen wir dir helfen????
wir müssen doch wissen wie dein scenegraph manager aufgebaut ist, herr klugi
-
sorry.
mit AddObject(..) wird einfach ein Object in die "render-warteschlange" (eine verkettet liste) eingefügt...
-
ich hab mir halt gedacht, dass ich mit new jedes mal ein neues objekt auf dem heap erzeuge, was man ja eigentlich nicht sollt, weil der alte platz auf den der zeiger zeigt noch nicht gelöscht worden ist (aber diese aufgabe übernimmt ja schließlich die verkettete liste, wenn mein programm beendet wurde ...
weiß denn niemand was?!?
-
*nach oben schieb*!
-
Also das Erzeugen der Kugel ist ok so, der Fehler wird wohl eher in Deinem SceneManager liegen.
-
Hi gast,
wie verwaltet dein Screenmanager die objecte? Du wirst ja bestimmt eine verkettete liste oder ein Array haben in welchen dein Screenmanager die Objecte aufnimmt oder ?
Lass mal was über die Funktionsweise deines Screenmanagers sehen sonst wird dir hier keiner groß helfen können , denn die meisten hier haben keine Kristalkugeln.:p
-
ungefähr so:
class CSceneManager{
list<CObject*> objectlist;void Addobject(CObject *Obj);
//[...]}
und in Addobject einfach das objekt in die liste einfügen:
void Addobject(CObject *Obj){
objectlist.push_back(Obj);
}