Jak napisać główną pętlę gry? [Zamknięte]


130

Jak napisać główną pętlę gry? Jakie rzeczy powinieneś robić w pętli gry i jakich rzeczy nie powinieneś robić w pętli gry?

Napisałem ich dużo, ale tak naprawdę nigdy nie czytałem na temat pętli gry. Jestem pewien, że mógłbym je znacznie poprawić, ale nie jestem pewien, jak to zrobić.


4
Zła odpowiedź: co powiesz na użycie czyjegoś silnika, aby stworzyć dla ciebie tę pętlę? :)
user712092

możesz zapytać użytkownika o całkowitą liczbę ramek, które chce uruchomić, i użyć pętli for do n-krotności liczby buforów.
Uğur Gümüşhan

Odpowiedzi:


121

Główna pętla gry obsługuje trzy główne zadania:

  1. Uzyskaj wkład użytkownika
  2. Zaktualizuj stan gry
  3. Narysuj grę

Prosta pętla gry po prostu łączy te trzy zadania w jedną pętlę while. Ma to niepożądane skutki:

  1. Gra działa z różnymi prędkościami na różnych komputerach.
  2. Procesor (może być niepotrzebnie) ustalony na 100% wykorzystania.
  3. Brakuje „stanów gry” / menu lub są one pomieszane z kodem gry.
  4. Główna pętla gry jest bardzo długa i trudna do utrzymania.
  5. Kod jest trudny do rozszerzenia / przeniesienia na inne platformy.

Zaawansowane pętle do gry rozwiązują powyższe problemy. Oto kilka przydatnych artykułów:

Aby uzyskać doskonałą przykładową pętlę gry, zapoznaj się z wersją demonstracyjną łyżwiarki Allegro:

  • Kod pętli gry znajduje się w frameworku . C.
  • Przeglądaj pełny kod źródłowy tutaj .

Pętle gier często wykonują ten sam rodzaj pracy w przypadku większości gier, dlatego zastanawiałem się nad sposobem stworzenia uogólnionego środowiska gry. Lepiej napisać jedną implementację pętli gry i udostępnić ją między grami. Oszczędza to pracę podczas tworzenia nowej gry, a ulepszenia w wspólnej pętli gier mogą być wspólne dla wszystkich gier (na przykład dodanie licznika FPS lub funkcji przechwytywania ekranu).


1
Tak, jak podejrzewam, zdecydowanie mogę wprowadzić ulepszenia. Dobra lektura. Dziękujemy również za opublikowanie kodu. Dzięki tym rzeczom świetnie jest zobaczyć rzeczywisty kod gry.
hokiecsgrad

1
Procesor powinien utknąć przy 100% obciążeniu (lub więcej, np. 50%, jeśli masz co najmniej 2 rdzenie). Pomyśl o tym. Jak zamierzasz uzyskać najnowocześniejszą fizykę, zabójczą grafikę, jeśli siedzisz tam i mówisz sobie: „Och, ale nie chcę używać całego procesora”. Tak, jeśli to możliwe, powinieneś użyć 100% procesora (co oznacza jednak wielowątkowość na dzisiejszych komputerach, więc bardzo trudno jest używać 100% 4 rdzeni przez cały czas). Wykorzystaj w pełni maszynę, na której pracujesz, na tyle, na ile możesz.
bobobobo

5
Pozwól mi dołączyć: dla programów komputerowych . Na urządzeniu przenośnym spalisz znacznie więcej baterii, więc martwisz się o 100% zużycie.
bobobobo

1
@ user6003859: Naprawiłem link.
Leftium


51

Poleciłbym artykuł Glenna Fiedlera na temat solidnej niezależności klatek, „ Fix Your Timestep!

(Mniej odpowiedni do omawianego tematu, ale pozostałe artykuły z serii są również całkiem dobre - podobnie jak wszystko na jego stronie!)


To zdecydowanie kilka naprawdę dobrych artykułów. Dzięki za opublikowanie!
hokiecsgrad

1
Popieram zalecenie dotyczące solidnej niezależnej implementacji klatek na sekundę. Wszystko w twojej grze powinno być implementowane jako wartość delta, którą okresowo aktualizujesz. I nie należy tego koniecznie robić w tym samym czasie, gdy przechodzisz do następnej klatki. W rzeczywistości, jeśli pominąłeś ramkę, prawdopodobnie naprawdę nie chcesz po prostu wywoływać metod aktualizacji z 2x deltą. Bardziej spójne byłoby wywołanie aktualizacji dwa razy z tą samą różnicą. Zdecydowanie poświęć trochę czasu na poznanie problemów z liczbą klatek na sekundę i cyklem aktualizacji. Zaoszczędzi ci to później.
Dennis Munsie

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.