Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

22.12.2013, 15:36

Statischer Zugriff auf eine Map

Gute Tag,
da ich jetzt Ferien habe, wollte ich mich wieder um die Spieleprogrammierung kümmern. Ich wollte mich jetzt mal mit Maps beschäftigen und den Zugriff auf diese Map von anderen Klassen.
Hier mein jetziges Problem!

Main enthält Objekt Map und Spieler.

Die Klasse Map enthält ein Array vom Typ int, welches die Map darstellen soll (0 = Boden, 1 = Wand, usw.)
Die Mapinfos werden von Dateien geladen und in das Array abgespeichert.
Es sollen andere Klassen über statische Methoden auf dieses Array zugreifen um zu Überprüfen, auf welches Feld sie gerade stehen.

Die Klasse Spieler soll kein Objekt Map enthalten, sonder diese statische Methoden nutzen. Leider kann ich in den statischen Methoden nicht das Array verwenden, da dieses nicht statisch ist. Sollte ich das Array statisch machen, gibt es nur Probleme mit dem Compiler und dem Laden von Mapinfos.

Hat da vielleicht irgendjemand einen Lösungsvorschlag?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

22.12.2013, 22:48

Die Map statisch zu machen ist eine schlechte Idee.
Warum willst du das denn überhaupt tun?

3

22.12.2013, 23:27

Ich will ja nicht die Map statisch machen, sondern bestimmte Methoden um Felder an einer bestimmten Position abzufragen.

Z.B. Habe ich in die Methode getTileAt(float x, float y)
Diese soll statisch sein, damit ich in der Update Methode von Spieler auf diese Methode zugreifen kann, ohne dass ich in der Klasse Spieler ein Objekt vom Typ Map erstellen muss. Also:

C-/C++-Quelltext

1
void Update(){ if(Map::getTileAt(Position.x, Position.y) == Wand) kollision = true;}


Eine Überlegung von mir ist, das ich eine Klasse Game erstelle, die das Objekt Map offen zur Verfügung stellt. Also:

C-/C++-Quelltext

1
void Update(){ if(Game->Map.getTileAt(Position.x, Position.y) == Wand) kollision = true;}

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

22.12.2013, 23:34

Eine statische Methode ist an kein Objekt gebunden.
Wenn du deine Map also mit statischen Methoden versiehst, dann gibt es quasi gar keine Map.

Natürlich sollst du in der Klasse "Spieler" kein "Map"-Objekt erstellen.
Ein Spieler gehört zu einer Spielwelt. Der Spieler besitzt einen Zeiger auf das Spielwelt-Objekt. Das Spielwelt-Objekt wiederum besitzt eine Map. Der Spieler kann also über die Spielwelt an die Map kommen.

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

5

23.12.2013, 16:44

Kurz gesagt: Bau deine Objekte so, dass sie am Ende alle eine stinknormale public-Funktion "Update" haben(am besten gleich mit Polymorphie, wenn du das schon kannst), und dann erstell am Ende eine Kasse "World", die dann all diese Objekte bindet und deren update-Funktionen aufruft.

Ist ein simpler Ansatz, den du aber weiter stricken kannst und im Prinzip für alles, was du an Projekten in der Richtung machst, nützlich :)
WIP Website: kevinheese.de

Werbeanzeige