Optymalizacja gry napisanej w allegro.

Optymalizacja gry napisanej w allegro.
cPlusPlus
  • Rejestracja:około 12 lat
  • Ostatnio:około 6 lat
  • Postów:99
0

Witam. Niedawno napisałem grę w c++ używając biblioteki graficznej allegro. Mam podobny problem do tego: Temat na forum. Otóż od czasu do czasu gra lubi się zawiesić. Po prostu podczas chodzenia albo klikania na obiekt gra staje w miejscu. Dodatkowo, po wejściu w menedżer zadań dowiadujemy się że gra "zjada" sobie 70%-98% zasobów procesora(mój laptop do pracy i5, 2,6 GHz, 12GB RAM, u kolegi z PCtem do gier podobny efekt). Moim zdaniem gra jest zwyczajnie niezoptymalizowana, bowiem się na tym nie znam. Na początku myślałem, że to wina wielowątkowości, ale napisałem już kilka mniejszych gier działających na tej samej zasadzie i wszystko było w porządku. Wobec tego zostawiam tylko kod do przeglądu(main.cpp tylko trzyma grę, wszystko siedzi w Variables.h i Map.h).

main.cpp:
http://www.wklejto.pl/220569

Variables.h:
http://www.wklejto.pl/220571

Map.h:
http://www.wklejto.pl/220572

satirev
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 lata
3

Niepotrzebnie obciążasz procka pustymi przebiegami w nieskończonych pętlach. Usypiaj wątki na jakiś czas (zleć im inne zadania).
Poza tym dla tak prostej gry nie potrzebujesz więcej niż 1 wątku. Zdefiniuj klasyczną pętlę gry:

Kopiuj
while ( game.is_running() )
{
  game.handle_events();
  game.update();
  game.draw();
}

Reszty nie analizowałem, bo tak zapisanego kodu nie da się czytać. Staraj się dzielić kod na małe funkcjonalności, poczytaj o DRY, KISS.

Ola Nordmann
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:414
0

wtf definicje w nagłówkach? O.o

Poddaje się. Tego faktycznie nie da się czytać.


<img src="http://scontent-a-vie.xx.fbcdn.net/hphotos-ash3/1379478_311850692288742_1730250652_n.jpg" />
Geniusz zua :>
Trebuh
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:okolice Łodzi
1

Ogranicz ilość klatek na sekundę do 30.


GG: 10101100010110000100011101 (BIN)
"Nie wszystko napisane w internecie jest prawdą" - Józef Piłsudski.
fasadin
a po co?
Trebuh
Po co ma jechać na "ile wlezie"?
fasadin
a w czym to przeszkadza?
Trebuh
Chyba mniej sprzętu potrzebuje gra która osiąga maksymalnie 30 klatek niż ta która ma 120, nie?
fasadin
zgadzam sie, ale przy wielordzeniowych procesorach przy prostej grze ktora nigdy nie osiagnie nawet 50% mocy obliczeniowej procesora naprawde warto ograniczac? Jezeli system bedzie chcial uruchomi nastepny rdzen
cPlusPlus
  • Rejestracja:około 12 lat
  • Ostatnio:około 6 lat
  • Postów:99
0

Dodałem licznik FPS, przy normalnym chodzeniu jest średnio 140. Podejrzewam, że kluczem do ograniczenia FPS jest tu założenie odpowiedniego ogranicznika na funkcję RefreshScreen(), ale pewności nie mam, więc wolę zapytać.

fasadin
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.