Klassen und deren verwendung..
-
Guten Tag,
Ich habe hier 3 Klassen, eine Map, eine Spieler und eine SpielKlasse, nun habe ich es soweit geschafft das ich in der Spielklasse ein Objekt von der Map erstelle, die Map dann Initialisiere, Lade und Zeichne. Nun möchte ich natürlich darauf rumlaufen, also mache ich ein Objekt vom Spieler und Initialisiere diesen und Zeichne ihn auch. Alles soweit sogut.
Jetzt möchte ich aber, während ich in der Klasse vom Spieler mich fortbewege, von der Mapklasse wissen wo ich genau steh (Also ich will wissen ob ich auf Wasser bin, Land, usw.) aber irgendwie raff ich nicht wie ich nun das Map Objekt, was ich in der SpielKlasse erstellt habe, an die Spielerklasse weitergebe..?
void c_Spiel::Run() { c_BombenFeld bombfield; c_Player player; player.Init(); bombfield.Init(); bombfield.Load(); while (spielWindow.isOpen()) { while (spielWindow.pollEvent(spielevents)) { if (spielevents.type == spielevents.Closed) spielWindow.close(); if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)) spielWindow.close(); } bombfield.Draw(&spielWindow); player.Update(&spielWindow); spielWindow.display(); spielWindow.clear(sf::Color::Black); }void c_Player::Update(sf::RenderWindow *spielWindow) { Move(); CheckPosition(); Render(spielWindow); } void c_Player::CheckPosition() { int x = m_s_player.getPosition().x / c_Spiel::BlockSize; int y = m_s_player.getPosition().y / c_Spiel::BlockSize; c_BombenFeld CheckPos; b_move = false; b_move = CheckPos.CheckMove(x, y); if (b_move == true) m_s_player.move(m_s_speedX, m_s_speedY); }bool c_BombenFeld::CheckMove(int x, int y) { if (map[x][y] == 'G') return 1; else return 0; }Im letzten abschnitt, also beim schaun ob ich richtig steh, ist die map[][] Variable leer. Ich nehme mal an das ist weil ich ja da ein neues Objekt erstelle und die Map in dem Objekt halt nunmal leer ist, ich weis nur nicht wie ich das vorherige Objekt jetzt dort einsetzen kann...

-
Wo ist denn deine map wie deklariert?
Diese "c_Name"-Notation ist auch sehr ungewöhnlich. Das solltest du dir schnell abgewöhnen.
-
Danke für die schnelle Antwort.
class c_BombenFeld { public: void Init(); void Draw(sf::RenderWindow *spielWindow); void Load(); bool CheckMove(int x, int y); char map[100][100]; private: sf::Texture t_ground, t_wall; sf::Sprite s_ground, s_wall; };void c_BombenFeld::Load() { for (int x=0;x<c_Spiel::mapgroesseX;x++) { for (int y=0;y<c_Spiel::mapgroesseY;y++) { map[x][y] = 'G'; if(y % 2 == 0) if (x % 2 == 0) map[x][y] = 'W'; if ((x == 0) || (x == c_Spiel::mapgroesseX) || (y==0) || (y==c_Spiel::mapgroesseY)) map[x][y] = 'W'; } } }und c_Name steht halt für class_name, irgendwie dacht ich für mich ist das logisch ^^ was wäre denn der Standard hier?
-
Ich benutze überhaupt keine Präfixe für Klassennamen. Beiuns ist Konvention, dass Klassennamen mit einem großen, Methoden/freie Funktionen mit einem kleinen Buchstaben beginnen.
Wieso verwendest du ein char[][] und keinen std::vector? Das wurde doch in einem anderen Thread schonmal angemerkt, wenn ich mich richtig erinnere. Dann hättest du auch gleich die Größen mit "eingebaut".
Dein Fehler ist, wie du bereits selbst erkennst, dass du in "CheckPositions" eine neue Instanz vom Bombenfeld anlegst. Du solltest das Bombenfeld als Referenz an "Spieler::Update" übergeben und dort - ebenfalls als konstante Referenz - an "CheckPosition" weitergeben.
-
Jo das mit dem vector weis ich, hab nur halt das alte übernommen, es geht mir hierbei nicht um die map ansich sondern um den aufbau

wenn ich aber versuche jetzt das Objekt zu übergeben, geht das nicht, wie übergeb ich das Objekt einer Funktion?
-
Flutscherino schrieb:
wenn ich aber versuche jetzt das Objekt zu übergeben, geht das nicht, wie übergeb ich das Objekt einer Funktion?
Was heißt "geht nicht"? Das Zauberwort heißt "Parameter". Wenn du an dieser Stelle ernsthaft Probleme hast, solltest du erstmal in Ruhe ein gutes Grundlagenbuch lesen, bevor du irgendwelche Spiele programmierst.
-
ich kann das Objekt nicht übergeben, mit (c_BombenFeld bombfield) geht es nicht..
-
Flutscherino schrieb:
ich kann das Objekt nicht übergeben, mit (c_BombenFeld bombfield) geht es nicht..
daddy_felix schrieb:
Was heißt "geht nicht"?
außerdem sollst du es ja auch als Referenz übergeben. Wenn du nicht weißt, was eine Referenz ist, solltest du erstmal un gutes Grundlagenbuch lesen, bevor du irgendwelche Spiele programmierst.
-
nee nee ich weis schon was das is, ich bin nur einfach zu lange dran glaub ich, ich hab das bombenfeld gar nich included in der hpp..
habs gefunden jetzt

-
Flutscherino schrieb:
und c_Name steht halt für class_name, irgendwie dacht ich für mich ist das logisch ^^ was wäre denn der Standard hier?
Es gibt keinen Standard, aber deine Variante ist gänzlich ungewöhnlich. Die häufigsten mir bekannten Varianten arbeiten ohne Präfix, und wenn schon mit Präfix dann mit "C" (Ohne Unterstrich).
-
jo bin neu im business, muss noch vieles lernen
