18. november 2003 - 18:28Der 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?
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.
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.
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.
ja jeg fik faktisk meget ud af Direct SDK'en og et godt overblik over hvordan det skulle gøres
Synes godt om
Ny brugerNybegynder
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.