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

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

1

19.06.2011, 12:27

[C++] SFML Spieler Klasse funktioniert nicht

Hi,
habmal ne Klasse für den Spieler geschrieben.
in der main steht:

player eins;
eins.machen(eins.figur);
...
...
...
...
...
App.Clear();
eins.spielen(App,eins.figur);
App.Display();


in der funktion spielen hab ich zur sicherheit ein cout gemacht das zeigt ob die funktion aufgerufen wird, funktioniert auch aber auf dem bildschirm ist nichts zu sehen.

Hier mal die Klasse:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class player
{
private:
    sf::Image image;
public:
    int iLeben;
    sf::Sprite figur;

    void machen(sf::Sprite &figur)
    {
        image.LoadFromFile("Wand.png");
        figur.SetImage(image);
        figur.SetPosition(200,100);
        figur.SetColor(sf::Color::Red);
        iLeben = 200;
    }

    void spielen(sf::RenderWindow &App,sf::Sprite &figur)
    {
        App.Draw(figur);
        std::cout <<"gezeichnet";
    }
};
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

JRJ

Treue Seele

Beiträge: 113

Wohnort: Tirol

Beruf: Schüler

  • Private Nachricht senden

2

19.06.2011, 12:53

Zum Schluss von cout gehört ein endl, weil die Konsole Zeilengebuffert ist.

C-/C++-Quelltext

1
std::cout <<"gezeichnet"<<std::endl;


Warum rufst du die Methode einer Klasse mit einer Membervariable der selben Klasse auf?

Das

C-/C++-Quelltext

1
sf::Sprite &figur
könntest du doch auch weglassen.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class player
{
private:
    sf::Image image;
public:
    int iLeben;
    sf::Sprite figur;

    void machen()
    {
        image.LoadFromFile("Wand.png");
        figur.SetImage(image);
        figur.SetPosition(200,100);
        figur.SetColor(sf::Color::Red);
        iLeben = 200;
    }

    void spielen(sf::RenderWindow &App)
    {
        App.Draw(figur);
        std::cout <<"gezeichnet"<<std::endl;
    }
};

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

3

19.06.2011, 14:08

Zu deinem Klassendesign: figur und iLeben sollten auf jeden Fall private sein. Da sollte nicht einfach jeder dran rumpfuschen dürfen. Ansonsten würde ich, wie JRJ schon sagte die entsprechenden Parameter aus der Methoden-Signatur entfernen und sf::RenderWindow darf meiner Meinung nach ruhig const sein.
Außerdem sind sf::Image und sf::Sprite auch deswegen zwei verschiedene Klassen, weil man sie nicht unbedingt zusammen nutzen sollte. Ein sf::Image sollte zu Beginn einmal geladen werden und bei Bedarf immer wieder von verschiedenen Sprites verwendet werden. Wie man das zum Beispiel verwirklichen kann, habe ich vor einiger Zeit auch mal in einem Tutorial beschrieben

Werbeanzeige