[#637]
Re: Bridge Strike - informacje
@juen,
post #627
Przyjrzałem się jeszcze raz grze na youtube i widzę że problem szybkości wynika przede wszystkim z kopiowania całego ekranu co klatkę. Można to rozwiązać znacznie szybciej, bez konieczności kopiowania całej ramki. Na początku trzeba przyjąć ograniczenie ilości klatek animacji kafelków. Tak na oko 4 zapętlone klatki wystarczą. Załóżmy że kafelki mają okrągłe rozmiary 32x32 px

.
Na początek dla uproszczenia niech będzie bez animacji. Potrzebne są dwa bufory ekranu.
1. Wyświetlany, wyższy niż ekran o wielkość kafelka.
2. Drugi bufor tej samej wielkości na którym będą rysowane kafelki.
Scroll pierwszego ekranu trwa 32 ramki obrazu, tyle co wysokość kafelka. W tym czasie musisz narysować drugi ekran przeskrolowany o jeden kafelek czyli 32 piksele w dół.
Ekran składa się z 80 kafelków, tyle trzeba narysować ale mamy aż 32 ramki aby to zrobić. Czyli 2,5 kafelka na ramkę do narysowania. Tym sposobem w czasie 32 ramek narysujesz drugi bufor przeskrolowany o 32 pikseli w dół. Teraz wystarczy go tylko podmienić z pierwszym buforem i tak w kółko.
Jeden kafelek na jednym bitplanie to 8 bajtów razy 32 linii czyli 256 bajtów. W 32 kolorach to 5 bitplanów czyli 1280 bajtów. W ramce trzeba skopiować 3 takie kafelki czyli mamy OGROMNE 3 kiliobajty do skopiowania na ramkę obrazu. A500 z samym chipem zrobi to 10 razy w jednej ramce.
A teraz jak zrobić animację.
Zamiast jednego dodatkowego buforu ekranu robisz 4 bufory czyli tyle ile klatek animacji kafelków. Na każdym z buforów rysujesz osobna klatkę animacji. Podczas skrolowania ekranu zmieniasz nie tylko adres pierwszej wyświetlanej linii ale cyklicznie kolejne klatki animacji. Rysując 4 klatki zwiększa się 4 krotnie ilość danych do skopiowania czyli z 3 kilobajtów robi się 12kb. To w dalszym ciągu A500 zrobi w ok. pół ramki. Reszta czasu na ustawienie wysokości sprajtów statków, helikopterów etc.
Polecam się na przyszłość