Podwojne buforowanie - eliminacja przerysowan
Mazi - 01-04-2006 00:21
Podwojne buforowanie - eliminacja przerysowan
Witam Mam problem, z ktorym walcze juz od jakiegos czasu i nie moge sobie poradzic. Chodzi mi mianowicie o wyeliminowanie efektu "przerysowywania" w grze Tetris. Efekt ten objawia sie tym ze jest juz namalowany klocek w nowym polozeniu a jeszcze widzimy jego stare polozenie. Myslalem ze podwojne buforowanie wyeliminuje ten efekt ale niestety nie. Efekt przerysowania pojawia sie rzadko ale chcialbym go calkowicie wyeliminowac. Ma on miejsce w momencie, kiedy przesuwamy klocek strzalka z klawiatury i w tym samym momencie watek, ktory przesuwa klocek w dol, takze przesuwa klocek - czyli nastepuje wywolanie metody repaint() praktycznie w tym samym czasie. Probowalem z synchronizajcja bloku kodu w metodzie paint(), wstrzymywaniem: wait - notify ale niestety nie pomaga. Moze ktos walczyl z podobnym problemem i ma jakies doswiadczenia? Bede wdzieczny za wszelkie sugestie.
ponizej fragment metody paint, ktora mi to wszystko rysuje:
... bufferGraphics.clearRect(0, 0, 100, 200); bufferGraphics.drawImage(...) bufferGraphics.drawImage(...) ... g.drawImage(offscreen, 0, 0, this); ...
-- pozdrawiam Mazi
clyde - 01-04-2006 00:21
Mazi napisał(a): > Witam > Mam problem, z ktorym walcze juz od jakiegos czasu i nie moge sobie > poradzic. Chodzi mi mianowicie o wyeliminowanie efektu "przerysowywania" w > grze Tetris. Efekt ten objawia sie tym ze jest juz namalowany klocek w nowym > polozeniu a jeszcze widzimy jego stare polozenie. Myslalem ze podwojne > buforowanie wyeliminuje ten efekt ale niestety nie. Efekt przerysowania > pojawia sie rzadko ale chcialbym go calkowicie wyeliminowac. Ma on miejsce w > momencie, kiedy przesuwamy klocek strzalka z klawiatury i w tym samym > momencie watek, ktory przesuwa klocek w dol, takze przesuwa klocek - czyli > nastepuje wywolanie metody repaint() praktycznie w tym samym czasie. > Probowalem z synchronizajcja bloku kodu w metodzie paint(), wstrzymywaniem: > wait - notify ale niestety nie pomaga. Moze ktos walczyl z podobnym > problemem i ma jakies doswiadczenia? > Bede wdzieczny za wszelkie sugestie. > > ponizej fragment metody paint, ktora mi to wszystko rysuje: > > ... > bufferGraphics.clearRect(0, 0, 100, 200); > bufferGraphics.drawImage(...) > bufferGraphics.drawImage(...) > ... > g.drawImage(offscreen, 0, 0, this); > ... >
;) Cos namieszales. Po pierwsze z opisu nic nie wynika. Mysle ze problem lezy w podejsciu do problemu.
Nie wiem jak reprezentujesz klocki, ale pierwsza i jedyna sugestia to by odseparowac logike gry od przerysowania i wywolani typu keypressed. keypressed niech nic nie rysuje, po prostu niech watek przerysowuje wszystko z jakas czestotliwoascia i zarzadza logika gry, a keypressed wykozystaj tylko i wylacznie jako interfejs, ktory przesyla informacje dla petli glownej. Juz od niej niech zalezy co przesunac i gdzie, a w paint TYLKO wizualizuj.
--
clyde
kukems - 03-04-2006 00:08
Mazi wrote:
> Witam > Mam problem, z ktorym walcze juz od jakiegos czasu i nie moge sobie > poradzic. Chodzi mi mianowicie o wyeliminowanie efektu "przerysowywania" w > grze Tetris. Efekt ten objawia sie tym ze jest juz namalowany klocek w > nowym polozeniu a jeszcze widzimy jego stare polozenie. Myslalem ze > podwojne buforowanie wyeliminuje ten efekt ale niestety nie. Efekt > przerysowania pojawia sie rzadko ale chcialbym go calkowicie wyeliminowac. > Ma on miejsce w momencie, kiedy przesuwamy klocek strzalka z klawiatury i > w tym samym momencie watek, ktory przesuwa klocek w dol, takze przesuwa > klocek - czyli nastepuje wywolanie metody repaint() praktycznie w tym > samym czasie. Probowalem z synchronizajcja bloku kodu w metodzie paint(), > wstrzymywaniem: wait - notify ale niestety nie pomaga. Moze ktos walczyl z > podobnym problemem i ma jakies doswiadczenia? > Bede wdzieczny za wszelkie sugestie. > > ponizej fragment metody paint, ktora mi to wszystko rysuje: > > ... > bufferGraphics.clearRect(0, 0, 100, 200); > bufferGraphics.drawImage(...) > bufferGraphics.drawImage(...) > ... > g.drawImage(offscreen, 0, 0, this); > ... >
Skorzystaj z renderowania aktywnego:
http://java.sun.com/docs/books/tutor...rendering.html
-- Pozdrawiam kukems
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[mysql]Numerator wiersza / uniknięcie podwójnego ORDER BY
[MySQL] Dostaję podwójny wynik wyszukiwania. Co jest ?
[postgresql] Podwojne GROUP BY z roznymi warunkami
podwojny (?) select na jednej tabeli
Jak wylowic jeden z podwojnych rekordow ?
[MySQL]Podwójny index?
Podwojne sortowanie
ROLAND FJ-540 i przerywające głowice
Re: Przerysowanie mapy - jak najlepiej?
z cyklu - PEREłKI ;-)...
zanotowane.pldoc.pisz.plpdf.pisz.plsulimczyk.pev.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|