Autor Wątek: (Wyjaśnione!) [Allegro]Migający obraz :((  (Przeczytany 3644 razy)

Offline yahu55

  • Użytkownik

# Styczeń 24, 2008, 19:08:47
Zaczęłem dzisiaj uczyć się allegro i napisałem pierwszy programik, ale mam problem z poprawnym wyświeleniem wszystkich bitmap na ekranie. Wydaje mi się, że zastosowałem "Double Buffering", a przynajmniej taki był mój zamysł, a czy się udało to...nie wiem bo wszystkie obiekty i teksty , oprócz pierwszej  bitmapy ("ludek") migają, za wyświetlanie odpowiada ten fragment kodu:

masked_blit( ludek, bufor, 0,0, ludek_x, ludek_y, ludek->w, ludek->h);
blit( bufor, screen, 0,0,0,0, 840,640);

masked_blit( ludek3, bufor, 0,0, ludek3_x, ludek3_y, ludek3->w, ludek3->h);
blit( bufor, screen, 0,0,0,0, 840,640);

textprintf(bufor,font,10,620,makecol(200,0,0),"Gracz 1 : %d",pts1);
blit(bufor, screen, 0,0,0,0, 840,640);

textprintf(bufor,font,740,620,makecol(200,0,0),"Gracz 2 : %d",pts2);
blit(bufor, screen, 0,0,0,0, 840,640);
« Ostatnia zmiana: Styczeń 25, 2008, 17:57:51 wysłana przez yahu55 »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Netrick

  • Użytkownik

# Styczeń 24, 2008, 19:30:51
Google + dokumentacja = odpowiedź na twoje pytanie...

Offline shyha

  • Użytkownik
    • Shyha@Flickr

# Styczeń 24, 2008, 19:51:30
Nie znam się na Allegro, ale chyba pojedynczy blit na końcu by wystarczył...
« Ostatnia zmiana: Styczeń 24, 2008, 19:54:10 wysłana przez shyha »

deX(ter)

  • Gość
# Styczeń 24, 2008, 19:59:17
Najpierw rysuj wszystko do bufora, dopiero później rób blit do screen.

//@Shyha był pierwszy ;].

Offline Infidel

  • Użytkownik

# Styczeń 24, 2008, 20:32:38
Podstawowa rzecz jakiej brakuje to vsync(). Zanim monitor skonczy wyswietlac do konca jedna klatke zaczyna druga, stad te migotania obrazu. Poczytaj dokumentacje zanim zaczniesz czegos uzywac :)

Offline shyha

  • Użytkownik
    • Shyha@Flickr

# Styczeń 24, 2008, 20:46:33
Nie prawda. Brak VS powoduje pewne efekty ale nie migotanie. Raczej coś w stylu pewnego 'rozjechania'.

Offline Infidel

  • Użytkownik

# Styczeń 24, 2008, 21:10:00
Brak vs powoduje duzo roznych rzeczy i zalezy jak to interpretujesz, mi to wyglada jak migotanie. Jeszcze przy tak duzej liczbie blitow to musza sie dziac cuda niewidy. Tak na marginesie ten kod to sieczka, poczytaj troche o podwojnym buforowaniu.

Offline yahu55

  • Użytkownik

# Styczeń 24, 2008, 21:29:38
Cytuj
Google + dokumentacja = odpowiedź na twoje pytanie...

A mogę skąś zdobyć dokumentację po polsku?

Cytuj
Najpierw rysuj wszystko do bufora, dopiero później rób blit do screen.

Aha, czyli jeden blit na końcu powinien załatwić sprawę....dzięki.

Cytuj
Tak na marginesie ten kod to sieczka, poczytaj troche o podwojnym buforowaniu.

Taaa wiem, chyba muszę zmienić tutorial ;/

« Ostatnia zmiana: Styczeń 24, 2008, 21:32:14 wysłana przez yahu55 »

Offline Netrick

  • Użytkownik

# Styczeń 24, 2008, 21:48:39
Cytuj
Google + dokumentacja = odpowiedź na twoje pytanie...
A mogę skąś zdobyć dokumentację po polsku?

Po pierwsze, bez angielskiego ani rusz w tym fachu. A po drugie, czemu ten wątek nie jest w PoL jeszcze?

Offline shyha

  • Użytkownik
    • Shyha@Flickr

# Styczeń 24, 2008, 21:54:45
Cytuj
Google + dokumentacja = odpowiedź na twoje pytanie...
A mogę skąś zdobyć dokumentację po polsku?

Po pierwsze, bez angielskiego ani rusz w tym fachu. A po drugie, czemu ten wątek nie jest w PoL jeszcze?
Bo pytanie, mimo, że dość banalne, jest dobrze sformułowane i w dobrym dziale. Nie jest to pytanie o kod ani o jego poprawienie, więc dlaczego miałoby trafić do PoL? Do zdecydowanej większości zadawanych na tym forum pytań można znaleźć odpowiedź na Google...
« Ostatnia zmiana: Styczeń 24, 2008, 21:57:14 wysłana przez shyha »

Offline Netrick

  • Użytkownik

# Styczeń 24, 2008, 22:04:42
Shyha, nie zgadzam się! Jest przerost kodu na treścią, a to podchodzi pod 'Jak nie lamić'... Żądam wyjaśnień!

deX(ter)

  • Gość
# Styczeń 24, 2008, 22:30:00
@Netrick: Ejjj.. Nie przesadzaj... Tylko byś stosy palił ;]. Pytanie jest OK, nie ma ortografów (a przynajmniej nie rzucają się w oczy) - to ważne, a autor nie podchodzi pod __Twoją własną__ definicję lamera!

Offline Netrick

  • Użytkownik

# Styczeń 24, 2008, 22:32:14
@Netrick: Ejjj.. Nie przesadzaj... Tylko byś stosy palił ;]. Pytanie jest OK, nie ma ortografów (a przynajmniej nie rzucają się w oczy) - to ważne, a autor nie podchodzi pod __Twoją własną__ definicję lamera!
Nie podchodzi pod moją, ale to są podstawowe problemy... Strach pomyśleć co będzie, jak gościu zacznie w 3d siedzieć!

Offline yahu55

  • Użytkownik

# Styczeń 24, 2008, 22:47:17
Cytuj
Strach pomyśleć co będzie, jak gościu zacznie w 3d siedzieć!

Przekonamy się czy będzie tak źle, aczkolwiek narazie tego nie planuje :D Dobra już sobie poradziłem z tym problemem dzięki za wskazówki.

Cytuj
Po pierwsze, bez angielskiego ani rusz w tym fachu. A po drugie, czemu ten wątek nie jest w PoL jeszcze?

No ja znam angielski, ale wiadomo, zawsze wygodniej w języku ojczystym ;)
« Ostatnia zmiana: Styczeń 24, 2008, 22:49:00 wysłana przez yahu55 »

Offline Ciunkos

  • Użytkownik
    • Black Sheep

# Styczeń 25, 2008, 00:17:27
Źle zastosowałeś Double Buffering niestety ;] Odpowiedź padła i chyba wiesz o co chodzi, a jak nie to masz:

//Tu przydało by się wyczyszczenie bufora np. clear_bitmap(bufor);
masked_blit( ludek, bufor, 0,0, ludek_x, ludek_y, ludek->w, ludek->h);
masked_blit( ludek3, bufor, 0,0, ludek3_x, ludek3_y, ludek3->w, ludek3->h);
textprintf(bufor,font,10,620,makecol(200,0,0),"Gracz 1 : %d",pts1);
textprintf(bufor,font,740,620,makecol(200,0,0),"Gracz 2 : %d",pts2);

//Teraz dopiero blitujesz bufor na ekran.
blit(bufor, screen, 0,0,0,0, 840,640);

Miłego kodzenia.