screen-Pointer übergeben an Funktion in SDL



  • Hallo zusammen,

    ich teste mich gerade an SDL heran und komm' hier gerade nicht weiter...
    vielleicht kann mir wer helfen 🙂

    Und zwar, erstelle ich den SDL-screen momentan in der main-Datei und
    rufe danach eine Funktion in der Grafik-Klasse auf, die auf den screen zeichnen soll. Von daher übergeb' ich an diese Funktion den Zeiger auf den screen. Hab' da aber wohl einen Fehler drin, der Compiler sagt mir:
    "no matching function call to "Grafik::update(SDL_Surface**)"
    "note: candidate: void Grafik:update(SDL_Surface*)"

    Hier bisschen Code:

    SDL_Surface *screen, *osito_vorne = NULL; // Pointer auf Null setzen
    
    ...
    if (SDL_Init ( SDL_INIT_EVERYTHING ) == -1)
            cout << "Fehler in der SDL-Initialisierung" << endl;
    
        screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );
        SDL_WM_SetCaption( "Artes marciales", NULL );
    
        time1 = SDL_GetTicks(); // speichert die Zeit in Milisekunden
        cout << time1 << endl;
    
    Grafik Zeichnung; // Instanz der Klasse Grafik
    
        while (game==true)
        {
            while (SDL_PollEvent(&event))
            {
            cout << "Zähler1:" << contador1 << endl;
    
            Zeichnung.update(&screen); // 1x pro Schleifendurchlauf wird gezeichnet! screen-Zeiger muss übergeben werden...
    ...
    
    //grafik.hpp
    
    #include <iostream>
    
    using namespace std;
    
    class Grafik
    {
      private:
      // Membervariablen
      int x_koordinate_spieler1, y_koordinate_spieler1; // sollte ich mir aus der Klasse Spieler holen!
      int x_koordinate_gegner, y_koordinate_gegner;
    
      public:
    
      SDL_Surface *screen, *osito_vorne;
    
      //Memberfunktionen
      void update(SDL_Surface *screen);
      void draw_hintergrund ();
      void draw_spieler1 ();
      void draw_gegner ();
    
    };
    
    void Grafik::update(SDL_Surface *screen)  // zeichnet den kompletten Frame , beinhaltet alle einzelnen Funktionen
    {
        Grafik::draw_hintergrund();
        // Mostramos la pantalla
        SDL_Flip(screen);
    }
    

    Den screen müsste ich danach noch an die anderen Funktionen geben...
    was ist denn an der Übergabe bisher wohl falsch? 😕



  • In main funktion sollte man schreiben

    cout << "Zähler1:" << contador1 << endl;
    
            Zeichnung.update(screen); // 1x pro Schleifendurchlauf wird gezeichnet! screen-Zeiger muss übergeben werden..
    

    denn du hast schon "screen" als einen Zeiger, brauchst deshalb keine Adresse davon nochmal ziehen...



  • Ok, danke!

    Und was muss ich an die jeweilige Stelle der Funktion schreiben?



  • Und was muss ich an die jeweilige Stelle der Funktion schreiben?

    Wenn es funktioniert, bleibt alles anderes wie es ist.
    Aber bevor sich mit den verschiedenen Biblioteken wie SDL etc zu beschäftigen, würde ich dir raten, sich sowohl mit der C++ Zeigern und Referenzen, als auch mit "new" und "delete" ganz klar auseinanderzusetzen. Dies sind in C/C++ ganz wichtige Sachen, die immer wieder auftauchen.


Anmelden zum Antworten