animacja sceny z użyciem bitmap, zapobieganie mruganiu
Specyfikacja:
płomień jest wyświetlany przy dolnej krawędzi okna
pozycję płomienia i elementów tła wyznacza pozycja scroll'a (patrz poniżej)
zawsze cały płomień jest widoczny
wszystkie wykorzystywane obrazy należy dodać do zasobów programu
obrazy należy ładować z zasobów (a nie z zewnętrznych plików)
tło
obraz nieba zawiera plik sky.bmp
obraz gór zawiera plik land.bmp
tło gór ma kolor czarny - [RGB=(0,0,0)]
tło gór nie może być wyświetlane
wyświetlanie gór bez tła musi zostać zrealizowane w możliwie wydajny sposób
obraz nieba należy przeskalowywać do 2*(szerokość okna) i 1*(wysokość okna)
obraz gór należy przeskalowywać do 1,5*(szerokość okna) i 0,5*(wysokość okna)
obraz gór jest wyświetlany w dolnej połowie wysokości okna
obraz gór jest wyświetlany na wierzchu obrazu nieba
oryginalne rozmiary obu obrazów są nieznane, należy je odczytać po załadowaniu obrazów
animcja płomienia
dostarczone plik pozwala na wykonanie animacji płomienia
obraz jest 32 bitową bitmapą o rozmiarze 256x256 (można przyjąć w kodzie rozmiar bitmap za znany,
ale z użyciem zdefiniowanych stałych [#define cośtam 256], nie wolno używać stałych liczbowych)
obraz jest w formacie ARGB (ma zapisany kanał alpha)
oba obrazy zawierają w sobie 16 klatek animacji (rozmiar 4 i 16 podobnie jak 256 można przyjąć za znany, z uwagami jak poprzednio)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
funkcja AlphaBlend() jest w stanie wykorzystać ten obraz bezpośrednio
cykl animacji płomienia powinien trwać około 2 sek.
należy całkowicie wyeliminować efekty mrugania przy rysowaniu
rysowanie powinno odbywać się możliwie wydajnie
obsługa scroll'owania
scroll poziomy u dołu okna
należy obsłużyć możliwość zmiany pozycji scroll'a o "linie" i "stronę"
obraz powinien być również odswieżany w trakcie "przeciągania" pozycji scroll'a
pozycja scroll'a wyznacza przesunięcie płomienia i tła względem lewego brzegu ekranu
pozycja 0 - płomień przy lewej krawędzi, obrazy tła (szersze od okna) zaczynają być rysowane od lewej krawędzi
pozycja maksymalna - płomień przy prawej krawędzi, obrazy tła (szersze od okna) kończą być rysowane przy prawej krawędzi
Wskazówki:
CreateCompatibleBitmap(), CreateCompatibleDC()
LoadBitmap(), MAKEINTRESOURCE()
GetObject(), BITMAP
AlphaBlend(), BLENDFUNCTION
TransparentBlt(), RGB()
StretchBlt(), BitBlt()
do projektu należy dołączyć bibliotekę Msimg32.lib (Project Properties->Linker->Input->Aditional Dependencies)
SetScrollInfo(), SCROLLINFO, GetScrollPos(), ...
Przybliżona punktacja:
wyświetlanie nieba: 1.0
wyświetlanie gór: 1.5
obsługa scroll'a, zmiana pozycji elementów sceny: 2.5