Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Dominik1998

Frischling

  • »Dominik1998« ist der Autor dieses Themas

Beiträge: 3

Beruf: Schule

  • Private Nachricht senden

1

24.12.2011, 18:53

SDL Tilemap Ruckelt

Hallo, ich habe eine Tilemap für mein Spiel programmiert, die auch funktioniert.
Das Problem ist das wenn die Tilemap gerendert wird ruckelt das Spiel sehr stark (gefühlt ca. 5FPS).
Meine CPU ist aber nur 30% ausgelastet...
An was könnte das liegen bzw. was kann ich verbessern :?:
Hier der Code:

C-/C++-Quelltext

1
void CGame::Run(){  while (m_bGameRun == true)  {       ProcessEvents();        g_pFramework->Update();     g_pFramework->Clear();      m_pLevelBackground->Render();;      m_Player1.Update();     m_Player1.Render();     g_pFramework->Flip();   }}


C-/C++-Quelltext

1
void CLevelBackground::Render(){    for (int i=0; i < m_nNumberTilesXLine; i++) {       for (int j=0; j < m_nNumberTilesYColumn; j++)       {           Tiles[i][j].Render();       }   }}


C-/C++-Quelltext

1
void CTile::Render(){   m_pSpriteTile->SetPos(m_nxPos, m_nyPos);    m_pSpriteTile->Render();}

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

24.12.2011, 19:11

Willkommen im Forum. Wie groß ist die Tilemap denn? Es könnte sein, dass es einfach zu viele sind. Zeichne mal nur ein Zehntel der Map.
Wo siehst du, dass die CPU zu 30% ausgelastet ist? Kann es sein, dass nur ein Kern voll ausgelastet ist?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Dominik1998

Frischling

  • »Dominik1998« ist der Autor dieses Themas

Beiträge: 3

Beruf: Schule

  • Private Nachricht senden

3

24.12.2011, 20:11

Die Tilemap ist 45x60 groß. Wenn ich z.B. nur 5x5Tiles render ruckelt es nicht. Aber wenn ich alle(45x60)Tiles render sind alle CPU-Cores nur ca. 25% ausgelastet. Also dürfte es dürfte das doch theoretisch auch nicht ruckeln?!?

Stazer

Alter Hase

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

4

24.12.2011, 20:17

Wie groß sind denn die zu zeichnenden Tiles selbst?

MfG Stazer

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

5

24.12.2011, 20:21

Das braucht nicht unbedingt viel CPU Power. 2500 ist für die SDL an sich schon recht viel, da es standardmässig nicht hardwarebeschleunigt ist.

Dominik1998

Frischling

  • »Dominik1998« ist der Autor dieses Themas

Beiträge: 3

Beruf: Schule

  • Private Nachricht senden

6

25.12.2011, 19:49

Also kann ich gegen das ruckeln nichts machen?

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

7

25.12.2011, 19:57

Es gibt sicher Möglichkeiten die Performance zu verbessern. Google doch ein wenig.

Hast du dir schonmal die SFML angeschaut? Damit sollte das ohne weiteres möglich sein.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

8

25.12.2011, 23:19

Zeichnen mit reiner SDL ist lahm. Da nimmt man entweder OpenGL dazu oder gleich ein Framework ala SFML, HGE o.ä, wenn man ein wenig mehr als 5 Bildchen anzeigen will.

9

26.12.2011, 11:20

Wenn ich das richtig in Erinnerung habe, sollte man mit der SDL nur die Bereiche neu zeichnen, welche neu gezeichnet werden müssen/sich verändert haben. Zeichnen (blitting) ist sehr teuer. So gesehen müsstest du in jedem Frame prüfen, ob ein Tile neu gezeichnet werden muss.

Möchtest du auf diese Prüfung verzichten, solltest du gleich die SFML verwenden. Diese nutzt die 3D Beschleunigung der Grafikkarte. Hier muss in jedem Frame die Szene neu gezeichnet werden.

Grüße ... Heiko

Zitat

Ich bin nicht der Messias.
Ich sage, du bist es, Herr. Und ich muss es wissen, denn ich bin schon einigen gefolgt.

https://bitbucket.org/bwbg

Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

10

26.12.2011, 19:09

Mit SDL müsste das auch irgendwie gehen. Z.B. das SDL_HWSURFACE flag bei SDL_SetVideoMode(). Hab mich aber lange nicht mehr mit SDL beschäftigt

Werbeanzeige