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

Flutschi

Treue Seele

  • »Flutschi« ist der Autor dieses Themas

Beiträge: 90

Wohnort: Schweiz

  • Private Nachricht senden

1

14.10.2012, 07:09

Klassen/Objekte realisierung..

Guten Tag,


Ich bin immernoch an meinem kleinen Bomberman und habe schon n paarmal neu angefangen, wie das halt so ist am anfang ;) , und steh immernoch irgendwie an derselben Frage..

Nun, ich habe hier eben mein Bomberman, hab es ganz ganz am Anfang aufgeteilt in 4 Klassen:

  • Game
  • Map
  • Graphics
  • Player

Wobei jede Klasse ihre eigenen Funktionen hat:

  • Game
    • Run
  • Map
    • Load
    • getMap

  • Graphics
    • DrawMap
    • DrawPlayer
    • MovePlayer

  • Player
    • Update
    • Move
    • Draw



Nun habe ich es hingebracht das das Spiel läuft, aber bis jetzt immer unschön, will heissen das ich es zwar geschafft habe indem ich:

  • Alles in Funktionsübergaben gepackt habe.
  • Das Game Objekt überall übergeben habe (also wirklich fast jede Funktion hatte das Game Objekt als übergabeparameter..).
  • Alles global deklarieren.


Nun, ich habe sehr sehr viel gelesen in letzter Zeit über C++, und irgendwie hab ich einfach im Kopf das:
  • Man sollte wenn möglichst OHNE Funktionsübergabe auskommen.
  • Man sollte ALLES über getFunktionen (Will heissen man sollte alles abfragen können von den anderen Klassen) kriegen.
  • OHNE globale Variablen auskommen!

Nun versuche ich jetzt mein Projekt irgendwie mit denen Voraussetzungen, wobei ich mir ehrlich gesagt nichtmal sicher bin ob das überhaupt das richtige ist, aber wie auch immer man lernt ja am besten aus Fehlern ;)


Jetzt mal zu meinen ersten Fragen, wieweit bin ich bis hier hin zum Text aufm richtigen Weg? Ist es wirklich richtig das man sowenig wie möglich über Funktionsübergaben regelt?


So, und wenn das oben stimmt, wie kann ich von

  • Player
    • Draw


die

  • Graphics
    • DrawPlayer


Funktion aufrufen ohne auch nur eine Funktionsübergabe?
Ich brauch ja vom Player aus das Objekt das schon vorher in der Graphics Klasse das Fenster aufgemacht hat, und wie soll ich das bitte rausfinden ohne übergabe? irgendwie steh ich auf nem Schlauch..
Auch zum Abfragen was das Objekt sein könnte, brauch ich ja das Objekt das eben das Graphics objekt kreiert hat, und das wäre ja wieder eine übergabe...



Ich weis schon das ich es lösen könnte über andere Wege, aber ich wills jetzt einfach so erreichen wie es im schönsten Fall ist! ;)


Vielen Dank fürs Antworten!
♥ SFML 2.0 Visual Express 2010 ♥

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

14.10.2012, 09:01

Schon allein die Tatsache, dass es "Player.Draw" und "Graphics.DrawPlayer" gibt, sollte Dich stutzig machen. Das sind nämlich zwei Methoden, die ihrem Namen nach das gleiche tun. Das sollte nicht sein. Entweder zeichnet sich der Player selbst oder die Graphics-Klasse macht es. Aber nicht beide. So wie es momentan klingt ruft "Player.Draw" the Methode "Graphics.DrawPlayer" auf. Auch das sollte nicht sein. Entweder sollte es gleich eine überliegende Klasse passend aufrufen oder es sollte keine "DrawPlayer"-Methode geben, sondern nur eine generischere, die entsprechend weniger macht.

Persönlich würde ich es ja so lösen:
Player { Player(Graphics); Draw(); private Animation; }
Animation { Animation(Graphics); Draw(); private Sprite[]; }
Graphics { Draw(Sprite); }


Graphics sollte übrigens kein "MovePlayer" besitzen. Warum auch? Wieso sollte eine Grafik-Schnittstelle wissen, wie sich der Spieler bewegen muss? Sollte das nicht die Map oder der Spieler selbst wissen?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BlueCobold« (14.10.2012, 09:08)


Flutschi

Treue Seele

  • »Flutschi« ist der Autor dieses Themas

Beiträge: 90

Wohnort: Schweiz

  • Private Nachricht senden

3

14.10.2012, 14:19

naja Graphics hat MovePlayer weil es nunmal die Klasse mit dem Sprite vom Spieler ist und ich da halt ganz einfach SpielerSprite.move ausführen kann..
♥ SFML 2.0 Visual Express 2010 ♥

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

14.10.2012, 14:29

Graphics sollte keine Sprites beinhalten, sondern nur diese zeichnen können. Also übergibt man Graphics ein Sprite und der zeichnet das dann. Ansonsten müsste Graphics ja irgendwie alle Sprites des ganzen Spieles beinhalten, was nicht sonderlich sinnvoll ist.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

Werbeanzeige