Avatar billede onkel_satan Nybegynder
23. september 2006 - 12:39 Der er 5 kommentarer og
1 løsning

Grafik flicker selv med double buffering

Nu er jeg så kommet dertil hvor jeg har fået tegnet grafikken og kan flytte objekter rundt på formen med input fra keyboard. Problemet var saa at de grafiske objekter blinkede/flicker a h til. Ok, lidt hurtig soegning og jeg kommer frem til double buffering som helt klart havde en maerkbar effekt, men det flicker altsaa stadigvaek. Som sagt er jeg ret ny på området naar det kommer til grafik så jeg har faktisk ingen ide om hvad det er der stadig forårsager at de grafiske objekter blinker/flicker.
I kan se min kode her: www.onk.dk/temp/TurtleSoccer.cs

På forhånd tak.
Avatar billede bulgroz Nybegynder
26. september 2006 - 08:59 #1
Indbyggede metoder til at fjerne flicker ved at enable DoubleBuffering kræver at man anvender OnPaint og/eller OnPaintBackground når der tegnes, hvilket ikke er tilfældet i din kode. Med andre ord, så skal du nok ændre på dit gameloop.

Derudover mangler du at vise koden til din Picture klasse, for at man kan se nærmere på eksemplet.

For øvrigt... husk at kalde Dispose på dine objekter (hvor det kræves), så som Graphics, Bitmap...
Avatar billede md_craig Nybegynder
27. september 2006 - 23:27 #2
Kan slet ikke lige finde hvor du enabler det... men her er en af de mest brugte kald:

this.SetStyle(

  ControlStyles.AllPaintingInWmPaint |

  ControlStyles.UserPaint |

  ControlStyles.DoubleBuffer,true);

Men det er ikke skudsikkert, husk på at hvis den tid det tager at tegne formen op, overskrider x antal ms, så er der bare ikke noget at gøre, what so ever... og det har jeg faktisk efterhånden set eksempler på flere gange nu...
Avatar billede onkel_satan Nybegynder
28. september 2006 - 04:32 #3
Har enablet disse og det funger stadig ikke. Mistaenker lidt at problemet laegger et andet sted. Som du kan se saa benytter jeg min ikke af OnPaint eventen men tegner manuelt en gang i mit game loop. Det var i hvert fald det råd jeg laeste gameDev.net's forum, at man bare skulle give en fuld skrue og tegne saa ofte som muligt. Det er maaske lidt overkill for mit spil da den pt. koerer 160 loops pr. sek.
Men som sagt saa mistaenker jeg lidt min manuelle måde at tegne objekterne på, for at vaere skyld i det her voldsomme flikkering.
Jeg har pakket hele mit projekt så i kan selv kan se hvordan det ser ud. Håber i kan finde problemet for jeg er helt på bar bund.

Ohh ja.. nu da jeg naevnte OnPait eventen. Hvornår/ofte bliver den event kaldt ? Jeg ved den bliver kaldt hvis andre vinduer overlapper, viduet bliver minimeret og så maximeret, men andre ord, når noget har overskrevet formen. Men bliver den også kaldt med et bestemt interval, så Graphics objekter kan tegnes korrekt i tilfaelde af de har flyttet sig ?
Avatar billede onkel_satan Nybegynder
28. september 2006 - 04:32 #4
ohh ja.. projektet kan hentes her www.onk.dk/temp/game.rar
Avatar billede md_craig Nybegynder
28. september 2006 - 11:33 #5
Kan tilføje at der hvor jeg har haft mest success med doublebuffering er på selvstendige Controlls og ikke på forms, dvs, når jeg har lavet en CustomControl, hvor jeg så i den har defineret at det skal være doublebuffering..

Når jeg tænker tilbage, så tror jeg faktisk ikke jeg på et eneste tidspunkt har haft held med double buffering på alm. forms...

ellers ved jeg ikke lige hvad jeg skal sige...
lav det i DirectX? :P... ^^
Avatar billede onkel_satan Nybegynder
05. oktober 2007 - 13:12 #6
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester