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

Crazy007

Treue Seele

  • »Crazy007« ist der Autor dieses Themas

Beiträge: 186

Wohnort: Tirol

  • Private Nachricht senden

1

23.12.2012, 11:25

Objektorientiertes Programmieren: Player.Update() in Game.Update()

Hallo Leute,
nach etwas längerer Programmier-Pause musste ich feststellen dass ich doch einiges verlernt hatte.
Ich versuche mein "Spiel"(Bewegbarer Kreis) so zu schreiben dass ich möglichst vieles davon für spätere Projekte wiederverwenden kann.
Das Prinzip: Ich habe eine Framework Klasse die SFML initialisiert, das Fenster öffnet und die MainLoop beinhält. Diese Klasse soll für jedes Projekt einfach wiederverwendet werden können. Die MainLoop führt Game.Update aus. Diese Funktion vereint einfach alle anderen Update Funktionen wie Player.Update usw.
Der Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Framework::Run()
{
    Player player;
    Game game;

    player.Init();

    while (window.isOpen())
    {
        ProcessEvents();
        Game.Update();
        window.clear(sf::Color::Green);
        window.draw(player.circle);
        window.display();
    }
}

C-/C++-Quelltext

1
2
3
4
void Game::Update()
{
    Player::Update();
}

C-/C++-Quelltext

1
2
3
4
void Player::Update()
{
    Player::Moving();
}

Das Problem: 'Player::Update': Unzulässiger Aufruf einer nicht statischen Memberfunktion
Ich kann Player::Update doch nicht einfach statisch machen oder?
Und eine Instanz von Player vorher zu erzeugen geht auch nicht da sie jedes Frame aufgerufen wird.

Hoffe ihr versteht was ich meine und danke im voraus,
Crazy007
Der Error sitzt meistens vor dem Bildschirm! :D

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

23.12.2012, 12:25

Und eine Instanz von Player vorher zu erzeugen geht auch nicht da sie jedes Frame aufgerufen wird.

Doch, das geht. Und muss gehen.

Vielleicht solltest Du Dir nochmal die Grundlagen von Objekten durchlesen.
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]

Crazy007

Treue Seele

  • »Crazy007« ist der Autor dieses Themas

Beiträge: 186

Wohnort: Tirol

  • Private Nachricht senden

3

23.12.2012, 12:59

Echt?
Ok das muss ich echt nochmals lesen
Danke
Der Error sitzt meistens vor dem Bildschirm! :D

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

4

23.12.2012, 14:41

Ich versuche mein "Spiel"(Bewegbarer Kreis) so zu schreiben dass ich möglichst vieles davon für spätere Projekte wiederverwenden kann.

Das wird dir sowieso nicht gelingen. Entwickel einfach dein Spiel. Wenn du gut genug bist Code zu schreiben, den du wiederverwenden kannst passiert das sowieso ganz von allein.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

23.12.2012, 14:53

Dieses ganze Code nochmals verwendet ist eh so ne Sache. Man steckt in Code oft mehr arbeit um ihn nochmals benutzen zu können. Aber genau dass tut man dann am Ende doch recht selten. So zumindest meine Erfahrungen, bzw die vieler Bekannter.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

6

23.12.2012, 15:20

Wiederverwendbarkeit ist in meinen Augen ein Nebeneffekt, der auftritt wenn man übersichtlichen und erweiterbaren Code schreibt. Dafür brauch man aber sehr viel Erfahrung.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

7

23.12.2012, 15:57

Und eine Instanz von Player vorher zu erzeugen geht auch nicht da sie jedes Frame aufgerufen wird.

Du musst diese Instanz eben zu Spielbeginn einmal initialisieren und dann beim Update-Schritt immer dessen update-Methode aufrufen. So wirst du es vmtl. ohnehin mit allen Spielobjekten machen.

Zur Wiederverwendbarkeit: Ich habe in langen Jahren gelernt, dass solche Designkonzepte auch ziemlich Motivationsraubend sein können. Wenn man nur noch am Überlegen ist, wie man ein an sich triviales Problem mit möglichst gutem Code-Design löst, macht das oft irgendwann keinen Spaß mehr, weil man schlichtweg nicht voran kommt. Lieber mal Quick'n'Dirty eine funktionierende Lösung schreiben, als sich wochenlang den Kopf darüber zu zerbrechen, ob die verwendete Lösung auch mit allen Design-Patterns, die man kennt konform geht. Und ich habe auch einige, codetechnisch eher hässliche , aber gut und flexibel funktionierende Code-Passagen, die ich regelmäßig wiederverwende ;).

Werbeanzeige