Damien Temat założony przez niniejszego użytkownika |
[Allegro] Buforowanie a rysowanie » 2008-12-31 16:40:46 Witam wszystkich. Mój problem wygląda następująco. Kurs allegro z tej stronki skończyłem wczoraj ;D Mam zamiar napisać grę w której będziemy rysować świat dla idących ludzików. No właśnie... przy podwójnym buforowaniu bufor jest czyszczony a ja chcę żeby na nim zostały tworzone rysunki w tyn celu tworzę np. mały prostokąt o współrzędnych myszki przy kliknięciu lpm. Próbowałem już kilka sposobów i żaden nie jest dobry tzn przy jednym miga, przy drugim po od kliknięciu lpm rysunek znika itd... Na razie to wygląda tak, że na ekranie odtwarzana jest animacja chodzenia ludzika(human) a ma wyglądać że bez przerywania animacji sobie rysuję. Oto fragment kodu: void game() { int bit_x = 100; play_sample( lv1sound, 255, 127, 1000, 1 ); while( !key[ KEY_ESC ] ) { while( mouse_b == 1 ) { } for( int i = 0; i <= 9; i++ ) { clear_to_color( bufor, makecol( 255, 255, 255 ) ); masked_blit( human, bufor, bit_x, 2, 100, 100, 100, 180 ); blit( bufor, screen, 0, 0, 0, 0, 800, 600 ); bit_x = bit_x + 265; rest( 100 ); } if( bit_x <= 2750 ) bit_x = 100; } } PS. Wesołego nowego roku :) |
|
DejaVu |
» 2008-12-31 17:01:29 Jeśli cokolwiek rysujesz w programie to jego budowa musi wyglądać tak: Warto zaznaczyć, że w ptk 2. nie mogą być zastosowane żadne pętle do animacji, bo wyświetli się wszystko na sobie. Jeśli chcesz zrobić animację musisz zrobić coś takiego: int licznik = 0;
licznik++; switch( licznik % 4 ) { case 0: break: case 1: break; case 2: break; case 3: break; } |
|
lynx |
» 2008-12-31 18:15:05 To zastosuj sobie po 3 buforowanie. :) W pierwszym jest rysowana mapa przez użytkownika. W 2 rysowany jest pierwszy bufor, wraz z ludzikiem, animacjami, i czyszceniem. Natomist w 3 bufor to ekran na którym wyświetlany jest 2 bufor. :) |
|
Damien Temat założony przez niniejszego użytkownika |
» 2008-12-31 19:20:29 Dziękuję obu panom za pomoc. Teraz wszystko działa jak należy :) |
|
Damien Temat założony przez niniejszego użytkownika |
» 2009-01-01 23:22:06 Witam ponownie. Żeby nie zakładać nowego tematu piszę w tym ;) Więc problem jest taki: jedna bitmapa odpowiada za bohatera z nią powiązane są wszystkie wydarzenia itp. Jakim sposobem zrobić żeby wyświetlało mi tego bohatera w różnych miejscach ale żeby zdarzenia dotyczyły tylko tego wybranego np. jest wyświetlanych 10 (to wiem jak zrobić) i jeden z nich podchodzi do krawędzi i upada. W jaki sposób zrobić żeby upadanie dotyczyło tylko tego jednego a nie ich wszystkich?? Jest na to jakiś w miarę łatwy sposób który nie wymaga dużych zmian w kodzie?? :) |
|
DejaVu |
» 2009-01-02 02:36:46 Załóż osobny temat, bo to nie dotyczy ani buforowania ani rysowania tylko technicznego rozwiązania problemu poruszana kilku obiektów niezależnie. |
|
Damien Temat założony przez niniejszego użytkownika |
» 2009-01-02 21:27:06 Aha. Co do tego potrójnego buforowania. W tym rozwiązaniu które podał Pietrzuch. Zrobiłem tak że jak coś skończymy rysować to bufor z rysunkiem zaczyna spadać (czyli efekt taki że rysunek poddawany jest grawitacji), spadanie odbywa się na drodze zmiany pozycji y bufora z rysunkiem. Nieruchome tło musi być na innym buforze więc umieściłem je na drugim. No i teraz rysunek jest zawsze za tłem np za budynkiem. Jest jakiś sposób żeby był zawsze na wierzchu?? Byłbym zadowolony np z takiego polecenia które kopiowałoby wszystko danym kolorze z jednego bufora na drugi. Istnieje coś takiego? Ps. Mam nadzieję że wyraziłem swój problem zrozumiale :) |
|
lynx |
» 2009-01-02 21:46:47 Jest jakiś sposób żeby był zawsze na wierzchu?? |
Jest i to bardzo prosty. Z tego co wyczytałem wnioskuję, że ty najpierw rysujesz w drugim buforze: [li]1. bufor 3[/li] [li]2. tlo[/li] [li]3. ludziki i animacje[/li] Wystarczy że zamienisz odpowiednio kolejność rysowania(1 z 2) w buforze 2 i wszystko będzie ok. :) |
|
« 1 » 2 |