Avatar billede code_freak Nybegynder
18. november 2003 - 18:28 Der er 9 kommentarer og
1 løsning

hvordan opdatere man bedst grafikken på et spil

Siden sidst jeg skev, har jeg læst en del om DirectDraw, og nu vil jeg gerne lave et lille flot spil, men det vil nok aldrig komme ud (siden jeg vil lave en lille copi af Sim Farm).
Jeg vil lave det fordi jeg vil træne mig selv i DirectDraw.

Jeg vil derfor, lige have sat på plads hvordan man bedst opdatere grafik og andet, skal man bruge en while(1) i hele spil scriptet, eller vil det overbelaste ens computer med flood?
Avatar billede bertelbrander Novice
18. november 2003 - 20:24 #1
Du bør starte en timer (SetTimer(...)) der løber med et passende interval, og så lave al din opdatering i timeout funktionen.

PS: C/C++ laves ikke i scripts men i source code.
Avatar billede code_freak Nybegynder
18. november 2003 - 20:32 #2
vis man laver det i SetTimer, så vil min baggrunds udregninger ikke køre, man skal vel ligge graffik og "source code" i samme loop?
Avatar billede bertelbrander Novice
18. november 2003 - 23:42 #3
Det er et meget stort spørgsmål og jeg skal ikke udgive mig for at være ekspert inden for design af spil.

De få spil jeg har lavet har været så simple at jeg har kunnet lave alt beregning i timer funktionen.

Der kan selvfølgelig være tilfælde hvor man er nødt til at lave baggrunds processering, men jeg vil stadig mene at det rigtige er at opdatere grafikken i  en timer funktion. Der vil selvfølgelig være brug for en eller anden for for synkronisering mellem de to dele.
Avatar billede code_freak Nybegynder
18. november 2003 - 23:59 #4
i 3D "FPS" bruger man while(1)... men det er vel også fordi det skal gå hurtigt... men ville se om det var en god idé i norrmale RTS spil
Avatar billede bertelbrander Novice
19. november 2003 - 00:23 #5
FPS og RTS ?
Avatar billede bertelbrander Novice
19. november 2003 - 00:25 #6
Nej, du behøver ikke at forklare hvad det betyder, det var mere ment som en demonstration af at jeg ikke ved noget om 3D-spil.
Avatar billede jpk Nybegynder
19. november 2003 - 08:56 #7
I absolut simple spil der ikke kræver en frame rate som sådan (fx minestryger), er det fint med en timer, men til et "rigtig" spil anvender man så godt som altid et tight loop.
Avatar billede code_freak Nybegynder
14. december 2003 - 21:56 #8
point?
Avatar billede jpk Nybegynder
15. december 2003 - 09:05 #9
Som du sikkert har set, anvender stort set alle eksempler fra DirectX SDK'en, et tight loop. Hvis man har andre programmer kørende i baggrunden, der kræver real-time thread state, er det naturligvis et problem. Men generelt er det jo de færreste der brænder CD'er samtidig med de spiller deres yndlings 3D-spil...

For et par uger siden var der en diskussion på DirectX Graphics mailing list, der omhandlede dette emne. Den "generelle" opfattelse var, at hvis en konstant frame rate var meget vigtig, er der ikke noget at gøre andet at "hogge" CPU'en konstant. Der kom også forslag om at se hvor megen tid der var til næste frame skulle være færdig (igen baseret på en stabil fps) og så lave en sleep indtil fx 20 ms + gennemsnitstiden for at rendere en frame, før den skulle være færdig (nemlig, ARGH!).
Endelig, hvis man vil være en god indbygger i Windows, kan man lave en sleep(0), så frigiver man kun det resterende af sin time-slice på CPU'en, hvis der er ventende tråde, med højere prioritet.
Avatar billede code_freak Nybegynder
15. december 2003 - 13:32 #10
ja jeg fik faktisk meget ud af Direct SDK'en og et godt overblik over hvordan det skulle gøres
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
Kurser inden for grundlæggende programmering

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