SFML Sprite lade Funktion...



  • Hallo,

    Ich habe neulich versuch eine Lade Funktion für Sprites zu erstellen
    damit ich alles auf einen anhieb für die Sprites einstellen kann.
    So siehts aus (funktioniert natürlich aber nicht),

    public:
    	void Load(char* pImageName, char* pSpriteName, const string sFileName);
    private:
    //hier ist noch nix
    
    ...
    void CSprite::Load(char* pImageName, char* pSpriteName, const string sFileName)
    {
    	sf::Image pImageName;
    	if(!pImageName.LoadFromFile(sFileName.c_str()))
    	{ cout <<"Fehler beim laden von"<<sFileName.c_str()<<"!"<<endl; }
    	sf::Sprite pSpriteName(pImageName);
    }...
    

    Ich bin was klassen angeht echt noch ein bissian unerfahren.
    Hab ich es total falsch gemacht, oder ist es schon ok..? 😃
    So siehts in der main.cpp aus:

    CSprite Cr;
    	Cr.Load(Calen, SCalen, "data/..");
    //....
            // Move the sprite
            if (App.GetInput().IsKeyDown(sf::Key::Left))  SCalen.Move(-200 * ElapsedTime, 0);
            if (App.GetInput().IsKeyDown(sf::Key::Right)) SCalen.Move( 200 * ElapsedTime, 0);
    

    Das sind die Fehler:

    1>c:\users\-\desktop\weltraumshooter - teil 2\weltraumshooter - teil 2\main.cpp(16) : error C2065: 'Calen': nichtdeklarierter Bezeichner
    1>c:\users\-\desktop\weltraumshooter - teil 2\weltraumshooter - teil 2\main.cpp(16) : error C2065: 'SCalen': nichtdeklarierter Bezeichner
    1>c:\users\-\desktop\weltraumshooter - teil 2\weltraumshooter - teil 2\main.cpp(33) : error C2065: 'SCalen': nichtdeklarierter Bezeichner
    1>c:\users\-\desktop\weltraumshooter - teil 2\weltraumshooter - teil 2\main.cpp(33) : error C2228: Links von ".Move" muss sich eine Klasse/Struktur/Union befinden.
    1> Typ ist ''unknown-type''
    1>c:\users\-\desktop\weltraumshooter - teil 2\weltraumshooter - teil 2\main.cpp(34) : error C2065: 'SCalen': nichtdeklarierter Bezeichner
    1>c:\users\-\desktop\weltraumshooter - teil 2\weltraumshooter - teil 2\main.cpp(34) : error C2228: Links von ".Move" muss sich eine Klasse/Struktur/Union befinden.
    1> Typ ist ''unknown-type''
    1>Sprite.cpp
    1>c:\users\-\desktop\weltraumshooter - teil 2\weltraumshooter - teil 2\sprite.cpp(5) : error C2082: Neudefinition des formalen Parameters "pImageName"
    1>c:\users\-\desktop\weltraumshooter - teil 2\weltraumshooter - teil 2\sprite.cpp(6) : error C2228: Links von ".LoadFromFile" muss sich eine Klasse/Struktur/Union befinden.
    1> Typ ist 'char *'
    1>c:\users\-\desktop\weltraumshooter - teil 2\weltraumshooter - teil 2\sprite.cpp(8) : error C2082: Neudefinition des formalen Parameters "pSpriteName"
    1>c:\users\-\desktop\weltraumshooter - teil 2\weltraumshooter - teil 2\sprite.cpp(8) : error C2664: 'sf::Sprite::Sprite(const sf::Image &,const sf::Vector2f &,const sf::Vector2f &,float,const sf::Color &)': Konvertierung des Parameters 1 von 'char *' in 'const sf::Image &' nicht möglich
    1> Ursache: Konvertierung von 'char *' in 'const sf::Image' nicht möglich
    1> Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig

    Ich hab natürlich schon einiges versucht, da ging aber alles
    nicht. Hoffe auf Hilfe!
    Lg Generator! 🙂



  • Naja. Die Fehlermeldung sagt ja bereits alles. Was ist Calen und SCalen?!



  • Ich frage mich, warum du eine eigene Sprite-Klasse entwickelst. SFML bietet bereits eine:

    http://www.sfml-dev.org/documentation/1.5/classsf_1_1Sprite.htm

    Gegebenenfalls könntest du eine Art Resourcen-Manager programmieren, welcher die Grafiken (Images) lädt und bei Bedarf neue Sprites erzeugt.

    Pseudo-Code:

    SpriteManager sm;
    sm.loadAll();
    
    sf::Sprite anAlien = sm["AlienShip"];
    sf::Sprite myShip = sm["PlayerShip"];
    ...
    

    Der Manager kümmert sich um die Grafiken. Und erstellt bei Bedarf Sprites.

    ---

    (i) Sprites (sf::Sprite) halten Referenzen bzw. Zeiger auf Grafiken (sf::Image). Es gibt gute Gründe dafür, das getrennt zu halten.

    ---

    Dein gezeigter Code sieht jedoch noch ziemlich konfus aus. Ich denke mal, dass du dich noch etwas tiefer mit Klassen beschäftigen solltest. Klassen sind kein Allheilmittel.

    Grüße ... Heiko


Anmelden zum Antworten