Sprites drehen (SDL)



  • Moin Leute

    Ich habe folgendes Problem:

    Ich würde gern Sprites rotieren lassen.
    Ich baue mein Spiel dabei auf SDL auf.
    Versucht habe ich das Ganze schon mit SDL_gfx, was aber komischer Weise nicht funktioniert 😞

    Hier ist der Code ausschnitt :

    else if (g_pFramework->KeyDown (SDLK_a))
      {
    	  m_pSpriteplayer = rotozoomSurface(m_pSpritePlayer->GetSurface (), 1, 90, 1);
      }
    

    Die Funktion Getsurface () liefert wie der Name schon sagt 😉 ein Surface zurück (genau wie rotozoomSurface es will.
    Als nächstes muss die Zoomstufe übergeben werden, die 1 ist da ich nicht zoomen will :D.
    Dann kommt der Winkel und dann die Variable "Smooth".

    Wenn ich das Ganze also Kompiliere bekomme ich folgenden Fehler:

    `error C2664: 'SDL_Surface::SDL_Surface(const SDL_Surface &)': Konvertierung des Parameters 1 von 'SDL_Surface *' in 'const SDL_Surface &' nicht möglich

    1> Ursache: Konvertierung von 'SDL_Surface *' in 'const SDL_Surface' nicht möglich

    1> Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig`

    ICh kann damit gar nichts anfangen.
    Es liegt wahrscheinlich an GetSurface .

    SDL_Surface GetSurface () {return m_pImage;}
    

    Könnt ihr helfen?
    Danke 🙂



  • Geheimtipp: der erste Parameter von rottozoomSurface() erwartet als ersten Parameter einen zeiger auf SDL_Surface (;



  • Erstmal danke 🙂

    ICh habs jetzt folgendermaßen versucht:

    SDL_Surface *m_pSurfaceRotation;
    
    m_pSurfaceRotation = m_pSpritePlayer->GetSurface ();
    

    der fehler bleibt derselbe 😞

    Was mache ich falsch? 😉



  • Bei dem Parameter, sowie bei dem Funktionsdatentyp handelt es sich um einen Zeiger auf SDL_Surface. m_pSpritePlayer->GetSurface() << returnt nur eine Referenz. Macksu so:

    else if(g_pFramework->KeyDown (SDLK_a))
    {
    	m_pSpriteplayer = rotozoomSurface(&m_pSpritePlayer->GetSurface(), 1.0, 90.0, 1);
    }
    

    Beachte das der 2. und 3. Parameter einen double erwartet...



  • Erstmal auch ein großes Danke an dich, aber es kommen dieselben Fehler 😞

    vllt. liegt es an GetSurface?

    SDL_Surface GetSurface () {return m_pImage;}
    

    Weiß nichtmehr weiter Oo



  • Oh, tut mir leid... >_< not seen.
    Ist es denn nicht möglich, GetSurface() in einen Zeiger auf SDL_Surface zu verwandeln? Dann würden sich alle Probleme lösen... bevor du da mit void*-Adressen rumpfuschen musst 😃



  • m_pImage ist wohl ein Zeiger (auf eine SDL_Surface), wenns schon pImage heißt.

    Ursache: Konvertierung von 'SDL_Surface *' in 'const SDL_Surface' nicht möglich

    pImage ist ein SDL_Surface*, du versuchst aber eine SDL_Surface zurückzugeben.
    Der compiler versucht jetzt, das zu konvertieren, kann er natürlich nicht, und gibt die Fehlermeldung aus.

    Also:

    SDL_Surface* GetSurface () 
    {
    return m_pImage;
    }
    //statt
    SDL_Surface GetSurface () 
    {
    return m_pImage;
    }
    


  • Uchuujinsan schrieb:

    ...

    Den Tip habe ich ihm doch bereits gegeben... 😕



  • Ok Ich bin dank euch schonmal viel weiter gekommen 🙂

    (Ich bekomme nur noch einen Fehler ausgegeben ;))

    error C2102: '&' erwartet L-Wert

    m_pSpritePlayer = rotozoomSurface(&m_pSpritePlayer->GetSurface (), 1.0, 90.0, 1);
    

    hää? 😮



  • Nee, den Referenzoperator (&) brauchste ja nimma... deine (mem) fnc ist ja bereits ein Zeiger...



  • Wo siehst du da bitte einen Referenzoperator? Ich sehe da bloss einen Adressoperator.



  • Kóyaánasqatsi schrieb:

    Uchuujinsan schrieb:

    ...

    Den Tip habe ich ihm doch bereits gegeben... 😕

    Naja, ich dachte nicht das "Ist es denn nicht möglich, GetSurface() in einen Zeiger auf SDL_Surface zu verwandeln? " ironisch gemeint war, weil es ist nicht nur möglich, sondern es ist die einzige korrekte Lösung zu einem rein syntaktischem Problem 🙂

    Btw, eine Variable oder ein Rückgabewert mit SDL_Surface statt SDL_Surface* dürfte eigentlich immer und ausnahmslos falsch sein - SDL_Surface ist ein C-struct, keine C++-Klasse.
    Oder kennt jemand tatsächlich ne Möglichkeit wo das ansatzweise Sinn machen könnte...?



  • hustbaer schrieb:

    Wo siehst du da bitte einen Referenzoperator? Ich sehe da bloss einen Adressoperator.

    Ja du king, sorry für den Fehler 🙄



  • Kóyaánasqatsi schrieb:

    hustbaer schrieb:

    Wo siehst du da bitte einen Referenzoperator? Ich sehe da bloss einen Adressoperator.

    Ja du king, sorry für den Fehler 🙄

    Schreib halt einfach "&" wenn du nicht weisst wie das Ding an der Stelle heisst.
    Du King.
    🙄 🙄 🙄



  • Ja Maus, habe mich doch entschuldigt, brauchst mir ja nüt gleich innen Zeh beissen 😋



  • och nee jetzt kommt beim verknüpfen diese schei*e mit den unaufgelösten externen Verweisen Oo

    damit kann ich gar nichts anfangen 😞
    `Verweis auf nicht aufgelöstes externes Symbol "_rotozoomSurface" in Funktion ""private: void __thiscall CPlayer::ProcessMoving(void)" (?ProcessMoving@CPlayer@@AAEXXZ)".

    fatal error LNK1120: 1 nicht aufgelöste externe Verweise.`



  • Kóyaánasqatsi schrieb:

    Ja Maus, habe mich doch entschuldigt, brauchst mir ja nüt gleich innen Zeh beissen 😋

    Halt einfach's Maul Quasti!



  • @Red Joe
    Das ist nur ein kleiner Linker-Fehler, zeig mal deine Klassendatei (h und cpp).

    @hustbaer
    Wallum bittu so pöse tu mir?


Anmelden zum Antworten