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

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

1

19.10.2012, 18:44

sfml - Brauche Hilfe beim Rückgabewert einer integer Funktion

Hallo!
Ich arbeite zurzeit mit der sfml 2.0 und habe eine Klasse für ein Objekt 'Player' geschrieben.
Nun will ich in der main () meinen Player anzeigen lassen, mit der Funktion:

Window.draw()

Als Parameter benötige ich das Sprite von dem Player. Also habe ich folgende Funktion geschrieben:

C-/C++-Quelltext

1
2
3
4
int Player::getSprite()
{
    return sprite;
}


Problem ist halt nur, dass der Compiler nicht 'int' in 'Sprite' konvertieren kann. Also will ich das manuell machen. Habe auch schon mal gesucht und gesehen, dass die Klasse Sprite von sfml so definiert wurde:

C-/C++-Quelltext

1
2
3
class SFML_GRAPHICS_API Sprite : public Drawable, public Transformable
{
...


also habe ich mal folgendes ausprobiert:

C-/C++-Quelltext

1
2
3
4
int Player::getSprite()
{
    return (SFML_GRAPHICS_API) sprite;
}


Hat aber leider auch nicht funktioniert... Kann mir jemand vielleicht einen Hinweis darauf geben, wie der Compiler den Richtigen Wert, also die Variable 'Player.sprite' zurückgibt?

Danke schonmal!
:)

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

19.10.2012, 18:54

Wie wo was? Du kannst nicht einfach ein Objekt in ein int casten und selbst wenn, was willst du damit?

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

3

19.10.2012, 19:09

Ich zeig vielleicht erstmal meine 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
24
25
26
27
28
29
30
31
32
33
#ifndef PLAYER_H
#define PLAYER_H

class Player
{
    private:
        // Speedvariablen
        float speedX;
        float speedY;
            
        // Zeitvariable erstellen
        sf::Clock playerTimer;
        double playerSkippedTime;

        // Spritevariable erstellen
        sf::Sprite sprite;

        // Keyboardvariable erstellen
        sf::Keyboard key;

    public:
        // Bewegungsschleife
        void move(bool running);

        // load sprite
        void setPlayerSprite();

        // draw-Funktion
        int getSprite();

};

#endif


So und ich brauche jetzt irgendwie ne Möglichkeit, um in der Main auf die sprite Variable zuzugreifen. Könnt ihr mir da vlt. sagen wie ich das machen kann?
Gruß, Luca

4

19.10.2012, 19:18

Bitte benutzte Konstruktoren (und auch Dekonstruktoren, aber nicht in diesem Fall...) dann könntest du den Inhalt der setPlayerSprite Methode einfach im Konstruktor machen, das erspart dir das zusätzliche Aufrufen der setPlayerSprite Methode.

Du musst sf::Sprite &Player::getSprite benutzten.

PS: Du solltest mal die move Methode zu update Methode ändern. Das macht mehr Sinn, da du später z.B. Gravitation oder sonstiges darin machen kannst. (Vom Namen her)

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

5

19.10.2012, 19:33

okay, ich probiers mal! Vielen Dank!

6

19.10.2012, 19:37

Ich frage mich warum du ein Sprite als int zurück geben möchtest?
Was ist da dein Gedanke?

Die Draw-Funktion der Renderwindow klasse erwarte als Parameter ein sf::drawable Objekt. Ein Sprite ist von dieser klasse abgeleitet weshalb die ebenfalls ein Sprite übergeben werden kann.

Wie Delop schon schreibt sollte der Rückgabewert nicht int sondern sf::Sprite.

Schau auch mal in die Doku der sfml.

Gruß koschi
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

7

19.10.2012, 19:49

Ich würde sagen lern erstmal C++ bevor du sowas versuchst...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

19.10.2012, 21:50

Hehe, sehr amüsante Frage. Luca hat öfter solche Knaller drauf, schon seit einer geraumen Weile, Fortschritt ist da irgendwie keiner zu beobachten.
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]

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

9

19.10.2012, 22:57

Ich meine ich verstehe wenn man "direkt" loslegen will, aber alleine die Frage ist so formuliert, dass man direkt sieht das er offenbar kein C++ kann.

Versuch dich bitte noch mit kleineren Dingen bevor du mit SFML anfängst. Vor allem alles was mit Objektorientierung zu tun hat.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

19.10.2012, 23:02

Ach komm, die Idee ist doch lustig. Man konvertiere einen Kühlschrank in eine Katze. :D Notfalls halt manuell.
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]

Werbeanzeige