Also ich bin was cpp angeht noch ein ziemlicher Anfänger und habe jetzt einfach mal drauflos Programmiert. Jetzt stehe ich vor folgendem Problem: Ich habe eine Scene namens "Game" diese enthält eine Instanz der Klasse "Player" und eine Liste namens "TileList". Ich möchte jetzt das mein Player Objekt auf diese Liste zugreifen kann.
C++:
Game::Update() { Player.Update(); }
Player::Update() { // hier die TileList durchlaufen }
Ich hoffe ich habe mein Problem ausreichend geschildert.
also Softwaretechnisch kannst du die Liste z.b an deine Update-Methode übergeben:
C++:
Game::Update() { Player.Update(tilelist); // hier tilelist mitgeben }
// als referenz übergeben, damit du das "original" benutzt und keine Kopie Player::Update(TileList& tilelist) { // hier die TileList durchlaufen }
Software-Architektonisch stellt sich dann jedoch die Fragen: - Ist die Liste am richtigen Fleck? - Oder ist die Berechnung an der falschen Stelle? -- class God : public ChuckNorris { };Dieser Post wurde am 15.02.2015 um 00:22 Uhr von FloSoft editiert.
An solch eine Lösung dachte ich auch, aber das erscheint mir (wie du schon sagtest) als architektonisch falsch... Wie würdet ihr das Lösen? Die "TileList" sollte meiner Meinung nach in der Scene gespeichert werden! Aber die "TilePlayerCollide" Methode sollte doch in der "Update" Methode von "Player" sein, oder? Sollte ich vielleicht die "TilePlayerCollide" Methode in "Game" Integrieren?
Ich hab echt kein Plan wie man das richtig macht... Kann mir keiner mal ein Denkanstoß geben. In der Programmiersprache die ich vorher benutzt hatte, konnten Listen global initialisiert werden und könnten von jedem Objekt genutzt werden, wie wird soetwas in c++ gelöst?
globale variablen gibt es schon auch in c++, jedoch ist das dann ganz schlechter stil.
Seh ich deine Architektur aktuell richtig?
Code:
Game |- TileList |- Tile |- Player
Dann würde ich vermutlich die Collision in Form von "Player::collideWithTile(tile)" aus "Game::Update" (oder andere geeigneter "Game::Ort") per Schleife dort machen. -- class God : public ChuckNorris { };