Strukturierung eines Projektes
-
Hallo zusammen!
Ich versuche mich gerade ein wenig mit DirectX und C++. Dank der vielen Tutorials etc lade ich nun erfolgreich [:)] Modelle in den Speicher und kann Sie auch darstellen.
Dazu benutze ich eine Verwaltungsklasse, in der ein Objekt der Klasse Mesh erzeugt wird, welches das Laden und Rendern des Meshes übernimmt. Soweit so gut.Dann habe ich mir überlegt, zB für Fahrzeuge oder Gebäude eine eigene Klasse zu machen. Dann hätte ich zB zehn Objekte der Klasse Fahrzeug, die aber alle auf das selbe im Speicher befindliche Modell zugreifen sollen.
Mein Problem ist jetzt, dass ich nicht weiß, ob meine Mesh Klasse in der Verwaltungsklasse public sein muss. Nach meinen bescheidenen Programmierkenntnissen sollte das möglichst vermieden werden (oder?!). Wie muss ich das Ganze strukturieren, damit alle Fahrzeugobjekte auf das Modell zugreifen können?
In der Hoffnung, dass mein ZeigerReferenzObjektWirrwarrKnoten
im Kopf entwirrt wird und ich nicht das falsche Forum erwischt habe...
Danke im Voraus,
iop
-
eine verwaltungsklasse hat keine member von irgendwelchen objekten, lediglich einen kontainer in dem die verwalteten resourcen sind. natuerlich sind resourcen nicht public sondern mittels accessor funktion der verwaltungsklasse zugreiffbar.
-
Der "deutsche" Bjarne Stroustrup sagt:
"Ein Container ist ein Objekt, das andere Objekte enthält. Beispiele sind Liste, Vektoren und assoziative Felder."
rapso schrieb:
eine verwaltungsklasse hat keine member von irgendwelchen objekten, lediglich einen kontainer in dem die verwalteten resourcen sind.
Soll ich also meine Fahrzeug Objekte in zB einer Liste organisieren? Sind in zB Listen angelegte Objekte dann keine Member der Verwaltungsklasse? Sorry für mein Unvermögen, aber ich verstehe nicht, wie ich das angehen soll...
-
iop schrieb:
Soll ich also meine Fahrzeug Objekte in zB einer Liste organisieren? Sind in zB Listen angelegte Objekte dann keine Member der Verwaltungsklasse? Sorry für mein Unvermögen, aber ich verstehe nicht, wie ich das angehen soll...
ich sehe du informierst dich, da hilft man gerne

ein container (wie der name schon sagt, "contain") enthaellt die von dir verwalteten resourcen. eine verwaltungsklasse ist im gewissen sinne ein container+funktionen zum konfortablen umgang mit den resourcen. deswegen ist es nur sinnig (zumindestens wenn man es nicht besser machen koennte) die fertigen stl container zu nehmen.
die verwaltungsklasse laedt (wie du schon oben schriebst) die objekte ein und behaelt sie in dem container, will ein "haus" oder "auto" auf ein mesh namens "scheibe" zugreifen, fragt es halt deine verwaltungsklasse danach
z.b.const CMesh* ResourcenManager::Mesh(const std::string& rMeshName);und bekommt dann den pointer auf ein mesh das in einem container ist.
ein moeglicher container ist
typedef std::string tdMeshName; typedef CMesh* tdMeshResource; typedef std::map<tdMeshName,tdMeshResource> tdMeshContainer; class ResourcenManager { tdMeshContainer m_MeshResources; public: const tdMeshResource ResourcenManager::Mesh(const std::string& rMeshName); ... };wie du mit den grundlegenden c++/stl containern umgehen musst weisst du hoffentlich

fuer den anfang kannst du alle meshes beim initialisieren einladen, spaeter kannst du auch in der funktion die Mesh* zurueckliefert "on demand" laden, also erst pruefen ob ein mesh mit dem namen aufzufinden ist, falls nicht dann es laden, in den container stecken und den ptr returnen.... aber erst wenn das normale system laeuft

-
wo ihr grad beim thema seit xD...
also private / protected soll ja "nur" den zugriff von anderen klassen verhindern sprich den wert/function ausblenden wozu soll das bei einem spiel sin voll sein - ich kann mir nur vorstellen das es bei sicherheits relevanten anwendungen sinnvoll ist damit nach einem exploit der zugriff auf variablen verhindert wird, was aber effektiv bei spielen kein sinn macht ... oder gibts da noch andere vorteile wie zB schneller erreichbar (wenn ich mir es überlege, das ich nur über eine funktion an eine varaible heran komme entwickelt sich das eher zum nachteil) bzw mit multi-threading wird die wahrsceinlichkeit das einer liest und ein andere thread schreibt doch nicht umgangen ... die funktion wird ja aus den threads heraus auf gerufen ...
ich werde das mal eben testen xD :bin gespannt:
-
LinkeT schrieb:
also private / protected soll ja "nur" den zugriff von anderen klassen verhindern sprich den wert/function ausblenden wozu soll das bei einem spiel sin voll sein - ich kann mir nur vorstellen das es bei sicherheits relevanten anwendungen sinnvoll ist damit nach einem exploit der zugriff auf variablen verhindert wird, was aber effektiv bei spielen kein sinn macht
Ne, da hast Du was falsch verstanden. Private/Protected verhindert nicht den Zugriff auf die Variablen/Funktionen, es verhindert die Benutzung von deren Namen von außerhalb. Eine private-Variable lässt sich problemlos von außen verändern, wenn man einen Zeiger auf sie besitzt.
Der große Vorteil liegt darin, dass der Code, der auf eine private-Variable zugreifen kann vergleichsweise klein ist (im Idealfall nur die Klasse selbst). Wenn jetzt ein Fehler im Programm ist (und jedes größere Programm, egal ob Spiel oder sonstwas) wird Fehler enthalten, dann mußt Du statt dem ganzen Programm nur den Teil, der dort zugreifen kann anschaun. Da das normalerweise deutlich weniger, können Fehler so viel schneller gefunden und behoben werden. private und protected schützt Dich nur den Programmierer davor Fehler zu machen (bzw, hilft diese schneller zu lokalisieren), es schützt nicht während der Laufzeit vor Wertänderungen.
-
LinkeT schrieb:
...

das sind die grundlegensten grundlagen von objektorientierter programmierung ueber die du hier raetselst und vermutest.
-
rapso schrieb:
LinkeT schrieb:
...

das sind die grundlegensten grundlagen von objektorientierter programmierung ueber die du hier raetselst und vermutest.da ich ein fan von eindeutigen variabelnamen war/bin/sein werde ... ist mir das egal
grade im bereich spiele Programierung(!) will ich nich unnötig zeit mit einem call verschwenden (!) ... und wenn ich in das Problem haben das ich variablen in mehren threads gleichzeitig benötig ... dann teste wie schnell welcher thread arbeitetich hatte damit mal nen Problem gehabt war ein timing problem - wo ich schnell fest gestellt habe: wenn man ein thread hat der nur 25/s einen wert ändert (zB ein thread für input) dann ist es besser die daten die daraus resultieren vom "schnelleren" thread zu lessen (mein grafik engine hat auf XP mit einer 7800GTX +3500 FPS und bei 100 x 100 Polygonen imer noch >500FPS, OK jedes mal das selbe objekt aus 100Polygone, hab jetzt Bund vor mir ... und da bin ich eben mit nen anderen Projekten beschaftigt ... sonst hätte ich da was weiter gemacht ... so was wie ne map etc ...)
so wie ich das bei meinem Projekt bemerkt hab liminiert mein CPU noch ziemlich die leistung (x2 3800+ S939-.-)
-
Meinen vollen Respekt, dass Du überhaupt etwas gerendert hast.

-
omg, mir tut es zu doll weh deinen unsinn zu lesen um dich daraufhin zu flamen... du glaubst auch noch es verifiziert zu haben.. omg omg omg...
... ich glaube es gibt dinge die sollte man einfach nur stehen lassen.