[Allegro] Podwójne Buforowanie nic nie daje
Ostatnio zmodyfikowano 2008-09-30 21:42
lynx |
Mały przykład » 2008-09-30 20:50:36 No to ja napiszę Ci taki mały przykładowy kodzik (ty go zmienisz do swoich potrzeb) : #include <allegro.h>
int sx, sy;
int px, py; short int kierun, kierun2;
bool kolizja( void ) { if( sx < 600 ) / return true; if( sx > 0 ) return false; }
int main() { do { if( key[ Key_UP ] ) { sy--; kierun = 1; if( kolizja == true ) { sy++; } } if( key[ KEY_RIGHT ) { sx++; kierun = 2; if( kolizja == true ) { sx--; } } if( key[ KEY_SPACE ] ) { px = sx; py = sy; kierun2 = kierun; } switch( kierun2 ) { case '1': py--; break; } masked_blit( obrazek, bufor, pozycje statku, atrybuty funkcji ); masked_blit( obrazek, bufor, pozycje pocisku, atrybuty funkcji ); blit( bufor, screen, dalsze atrybuty funkcji ); while( key[ KEY_ESC ] ); } Ok, już tłumaczę funkcja kolizja sprawdza, czy obiekt statek, i tylko on nie wyjeżdża za ekran jak by co to go zatrzymuje w następnych funkcjiach. Gdy naciśniemy przycisk spacja, funkcje zapamiętują aktualny kierunek pozycję itp. rzeczy, by później móc prawidłowo wyświetlać pocisk. Pozycji pocisku nie sprawdzamy - bo po co? Jak pocisk będzie za ekranem to i tak zniknie. W miarę poznawania c++, i bibliotek graficznych/do tworzenia gier (tj. Allegro) poprzerabiasz ten kod, tak by był jeszcze lepszy i bardziej funkcjonalny. Jednak narzie myślę, że taki kod Ci wystarczy pomimo, że ma bugi. Zresztą w końcu nie zrobie za Ciebie wszystkiego. Kod ten napisałem dla przykładu i lepszego zrozumienia tego całego poruszania się obiektów. Kod nie jest też taki 'bogaty' ponieważ był pisany dosłownie przed chwilą, żeby Ci pomóc, zresztą tak jak mówiłem to jest tylko przykład jak rozwiązać twój problem. Mam nadzieję, że pomogłem i docenisz moje starania :D, bo w końcu chwile trwało to pisanie kodu. ;p Pozdrawiam, Piotrek. /edit: Co do rozszerzania kodu, to przykładowo możesz dodać parę zmiennych. Pocisk nie będzie znikał i się pojawiał w innym miejscu. Wystarczy, że dodasz zmienną int czas = 0; następnie za każdym obrotem pętli dodajemy do niej wartość 1 (czas++;). I zmieniamy to: if( key[ KEY_SPACE ] ) { px = sx; py = sy; kierun2 = kierun; }
na to: if( key[ KEY_SPACE ] && czas <= 1024 ) { px = sx; py = sy; kierun2 = kierun; czas = 0; }
|
|
Tombol Temat założony przez niniejszego użytkownika |
» 2008-09-30 21:42:28 Ok thx za wszelka pomoc teraz tylko rozkimam ten kod i będę mieć :P
Ktoś tam pisał żebym zaczął od c++ to odrazu odpowiadam że umiem c++ ale w teorii bo przeczytałem książki a napisałem 0 programów :/ |
|
1 « 2 » |