Framerate erhöhen



  • Hi!
    Ich bastle gerade ein kleines Spiel aber bei der Framerate hab ich ein Problem...

    im main-teil:

    while(msg.message != WM_QUIT)
    {
      if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
      {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
      }
    
       else
      {
    
        QueryPerformanceCounter((LARGE_INTEGER*)&CurCount);
    
         if(CurCount - LastCount > Frequency)
         {
          LastCount = CurCount;
          Framerate = Frames;
          Frames=0;
         }
    
         else
         {
         Frames++;
         }
    
        // Bewege Bilder
        // Zeichne Bilder
      }
    }
    

    Das Problem ist dass alles extrem langsam abläuft!
    Wenn ich Bilder bewege und dann einen Hintergrund + die Bilder darstelle dann wird alles immer langsamer...
    und dann beträgt die Framerate gerade mal nur noch 6 Frames!!!!
    ohne den Hintergrund darzustellen erhalte ich noch ca 20 Frames...
    Der Hintergrund besteht aus nur einer einzigen Bitmap ... also verstehe ich nicht wieso das alles so langsam ist

    ->d.h. alle Berechnungen und Darstelleungen passieren nur 6 mal pro Sekunde und dass ist echt viel zu wenig...

    Kennt ihr bessere Methoden so eine Main zu schreiben oder vlt eine andere Art Berechnungen zwar durchzuführen aber abhängig von der Framerate darzustellen?

    Wäre echt super!
    Kuldren



  • Die Framerate kannst Du einfach erhöhen, indem Du das Zeichnen schneller machst... mit der "Main" hat das aber wenig zu tun...



  • ich lade die bilder einmal in ein hdc_bitmap und dann blte ich es mit transparentBlt in einen hDC_buffer...
    den ich dann am ende der while (in der main) mit BitBlt in das hDC blte!

    Ich dachte das TransparentBlt und das BitBlt dauert einfach so lange dass das ganze nur 6 mal in der Sekunde durchgeführt werden kann...



  • Du könntest mal profilen und schauen was soviel Zeit kostet...



  • es sind zwei bilder die nacheinander dargestellt werden das kann doch nicht so lange dauern...

    ich habe einfach eine Sprite klasse geschrieben die beim erstellen eines objekts den pfad eines Bildes übergeben bekommt und eine methode hat mit der ich das bild ind dne buffer blte...

    gibts da eine bessere art?



  • Bilder nicht jedes mal laden 😉



  • Die Bilder werden beim erstellen eines Spriteobjekts nur einmal geladen und dann mit der Methode draw einfach aus dem hDC_bitmap in einen offscreen buffer (hDC_buffer) gebltet.

    Das Hintergrundbild ist 800x600Pixel groß und braucht enorm viel Zeit bis es gebltet wird!...
    wenn ich es verkleinere steigt die Framerate auch wieder...
    aber ohne Hintergrund ist das Spiel ja unmöglcih zu spielen!...



  • Schon mal was von DirectDraw gehört? 😉

    Greetz



  • ja nur kenne ich mich mit directdraw nicht wirklich aus und wollte es ohne directdraw versuchen!
    kennt ihr sonst keine möglichkeit?



  • Direct3D / SDL / OpenGL ... hehe 😉

    Nein - ne andere Möglichkeit hast du nicht, da s einfach übelst langsam is solche Sachen über die GDI zu blitten und nicht direkt mit Grafikbeschleunigung. Kannst dich ja noch an der GDI+ versuchen - aber ich glaub die is noch langsamer.

    Such einfach hier im Spiele-Forum n Tutorial - so schwer sind die APIs oben echt nicht zu bedienen - und ich denk mal komplexere Dinge (Pixelshader / Licht-Effekte) wolltest du eh net machen 😃

    Greetz


Anmelden zum Antworten