Avatar billede droa Novice
29. juni 2011 - 16:28 Der er 5 kommentarer og
1 løsning

Threads i Spil

Jeg har tit tænkt på hvad der er mest optimalt mht. spil og Threads,
Det er sådan at lige pt. har jeg lavet mig et lille RTS spil, hvor man bygger "Factories" som Producere forskellige ting.. de bliver transporteret af "Trucks". til en base. som så bruges som "Storage".. man kan ikke rigtigt andet i spillet, men det er jo en god start :)

nu er det så sådan at jeg har lavet spillet så det opretter i tråd for hver Lastbil og hver Factory og Bygning/Storage..

men er det en god ide?
jeg tænkte mere hvis man så har 1000 objecter som allesammen skal køre en unik tråd... ligenu har de alle adgang til mit "UnitMap" object... som så bliver behandlet af en anden tråd, som sårger for og Tegne det hele i et Grapthics2D object. .som så bliver sendt til Bufferen.

Det er nu mest et spørgsmål om optimering end noget andet tror jeg :)

håber nogen har et godt svar
Avatar billede aaberg Nybegynder
29. juni 2011 - 16:41 #1
Det er en MEGET dårlig ide at oprette tråde på denne måde. Hvis du får oprettet 1000 tråde, vil næsten alt CPU gå til context switching.

De fleste spil køre alt i en tråd. For meget avancerede 3D spil, som er udviklet til at udnytte flere CPU kerner, vil der være en tråd per kerne (typisk 3 eller 4 kerner).

Når du programmere spil, skal du lave en game-loop. Dette er i princippet en uendelig while-løkke, som starter med at gøre alt logik, som f.eks. udregne hvad AI'en skal gøre og udregne placering af objekter på skærmen. Derefter gentegner den skærmbilledet. Dette gør den så hurtigt den kan slippe af sted med det.

Når man siger at et spil kører med eksempeltvis 100 frames per second, vil det sige at den når rundt i game-løkken 100 gange per sekund.
Avatar billede arne_v Ekspert
29. juni 2011 - 17:00 #2
Traade er en meget nem programmerings model.

Men med den typiske implementation af traade i Java (SUN, IBM, BEA Java pass Windows eller Linux) fungerer det kun godt op til nogle faa hundrede traade.

En traad per objekt og >1000 objekter er ikke et godt design.

Du skal vaelge et design med enten kun antal samtidige traade i CPU som aldrig blokerer eller max. 100-200 traade som blokerer.
Avatar billede droa Novice
29. juni 2011 - 17:46 #3
arh.. det lyder nu meget logisk :)
men det er hovedsageligt for at spillet ikke skal hænge, hvis der nu er et problem med ens netforbindelse, eller hvis man nu lige Tabber ud af spillet.. eller andre problemer der gør at spillet måske ikke kan tænke så meget.

Hvad nu hvis jeg laver min Tråd på denne måde.

Tråd til NetSync (MultiPlayer get/set data) //For ikke og sænke Game loopet for meget.
Tråd til GameData //For at data bliver opdateret realtime, for ikke og sænke hastighed ved at spillets grafik hænger.

GameLoop //Spillets Analyze af data til Grafik

Så er det blevet 3 Tråde.. NetSync / GameData / Main Classen

Så kan jeg altid lave SpilleTid logikken i min GameData Tread, så hvis den f.eks hænger i 1.2 sekunder, at den så opdatere korrekt.. og at grafikken samt vinduet ikke fryser, hvis det er tilfældet.. samt hvis den ryger af nettet, kan jeg også ungå frost problemer der.

Lyder det bedre.. eller har jeg helt misforstået konceptet?
Avatar billede aaberg Nybegynder
29. juni 2011 - 18:17 #4
Det lyder ganske fornuftigt i mine øre.
Avatar billede droa Novice
29. juni 2011 - 19:27 #5
Det er jeg glad for og høre :)

Lægger du lige et svar så?
Avatar billede aaberg Nybegynder
29. juni 2011 - 19:34 #6
svar.  :)
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

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