[#44]
Re: Szybka i płynna animacja na Amidze 1200
@Minniat,
post #20
Dla mnie podstawowym celem gry strategicznej czasu rzeczywistego jak i innych gier czasu rzeczywistego jest płynna (nieskokowa) i szybka animacja (po prostu to jeden z moich największych wyzwań koderskich) Dzięki zmianie trybu wyświetlania osiągnąłem mój cel i gra zadziała szybko na każdej Amidze 1200.
Myśle że nie dokońca zdajesz sobie sprawe że 50 klatek na sekunde na A1200 (z Fastem) będzie mało realne dla Twojej gry. W tym momencie uzyskałeś płynną animację obiektu, czy też obiektów i pewnikiem mnożąc te obiekty to kilkunastu, kilku dziesięciu i dodając jakiegoś skrola powinieneś utrzymasz tą animację na poziomie 50 klatek/sek. Jednak pamietaj żę wyświetlanie obiektów na ekranie, ze zmianą ich pozycji i klatek animacji to jest tylko część Twojego zadania.
Gdybyś robił grę typu sztrzelanka z widokiem z boku, z góry (np Banshee), czy też gre typu platformówka (np.: ZOOL), to obsługa logiki (pozycji, wielkośći, mocy, zderzeń, punktów, etc) wszystkich obiektów na ekranie wraz ze skrolem była by stosunkowo mało czasochłonna dla procesora i wtedy 50 klatek było by bardzo realne. (np.: pozycja wrogów poprostu jest zapisana jako tablica wartości sinusa i wyświetlane jest z pewnym przesunięciem, wrogowie pojawiają się z tablicy wrogów dla danego miejsca etapu, proste warunki na śmierć od pocisku etc).
Jednak w przypadku gry takiej jak RTS dochodzi duża interakcja między obiektami, jak i sama obsługa tych obiektów których jest zdecydowanie więcej (jednostki + budynki wszystkich ras to będzie wartość grubo powyżej setki), a każdy z nich ma dużo bardziej złożoną obsługę niż obiekty w jakiejś strzelance, każdy z nich żyje swoim życiem (ma zdrowie, potrafi strzelać, potrafi się unowocześniać, rozwijać, potrafi pełnić kilka funkcji jak atak lub obrona, potrafi produkować, potrafi się regenerować, potrafi gromadzić zapasy i odwozić je do składu ... itd). A musisz obsłużyć je WSZYSTKIE za każdym cyklem gry (nie mylić z ramką ekranu), a nie tylko te które są na ekranie. Do tego dochodzi sztuczna inteligencja (AI) wrogów dla której również należy wygospodarować czas procesora. To wszystko plus ograniczenia samej A1200 z Fastem nie pozwolą Ci uzyskać tak wysokiej ilości klatek. Jeśli nawet uzyskasz 25 klatek na sek to będzie dobry wynik, choć w tym momencie sam nie wiem czy to też jest realne na takiej konfiguracji. Pamiętaj, że gracz będzie chciał aby obiekty reagowały na jego rozkazy w czasie rzeczywistym (wkońcu to RTS). A co mu po tym, że obiekty będą animowane bardzo płynnie jeśli gra nie będzie wstanie nadążyć choćby ze zmianją pozycji wszystkich obiektów?
Jednym z wyjść z takiej sytuacji jest zaimplementowanie zmiennej ilości klatek na sekunde, tak jak to jest w grach FFP, wtedy utrzymałbyś prędkość gry na stałym poziomie, kosztem płynności animacji niezależnie od kompa. Efektem czego np.: posiadacz A1200 z procesorem 68030/28 MHz będzie się cieszył animacją obiektów na poziomie 25 klatek/sek, co pewnie też będzie się zmieniało w zależności od liczby wszystkich obiektów gry.
A tak koniem końców, tu jeszcze raz poradze Ci abyś najpierw oprogramował logiką gry, a poprostu potem będziesz widział ile pozostaje Ci czasu na obsługę obiektów i ich animacji. Wiem że to co teraz robisz pewnikiem po części wykorzystasz, ale nie tworząc gry w odpowiedniej kolejności sam sobie utrudniasz zadanie.
To takie moje trzy grosze.