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 funktioniertHier 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 sagtein 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 anGetSurface
.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?