Pong på XGS bild (10 / 36 steg)
Steg 10: Programmera struktur - spelet Loop
Den viktigaste delen av varje spel, spelet slingan timing, måste vara felfritt på många av de äldre systemen och arkitekturer. Atari 2600, till exempel hade 76 cykler av processorn för att göra alla spelet logik, som inkluderar ljud också. Processorer i dag är mycket snabbare, och tidpunkten är endast en verklig ersättning för grafik trycka på hårdvara kuvertet.För tillämpningen av denna diskussion skall varje iteration av spelet kretsar motsvarar ritningen av endast en bildruta och är planerat att köra på cirka 30 bildrutor per sekund. Det spela kretsar måste hantera allt, varje iteration, men bo inom gränserna för TV eller monitor VSYNC. VSYNC är den längsta tidsperioden att monitorn eller TV är inaktiv och inte på att rita om skärmen. Försöker skriva till video minne samtidigt som den skärm eller TV försöker läsa kommer leda till hårdvara oförutsedda utgifter, skärm riva eller andra grafiska avvikelser.
Vad är första spelet loopen behöver hantera? Antar att för ett ögonblick, att alla spel konstruktioner delas in i spelet logik och grafikmotorn. Genom att sätta grafik koden först, och sedan hanterar, säga, player input, uppstår problem. Problemet uppstår från initiering scenen. I huvudsak kommer grafikmotorn har beräknat den första bildrutan innan slingan faktiskt startar och sedan dra den första bildrutan igen under den första iterationen av spelet slingan. Nu spelet logik beräknas, men den aktuella bildrutan i slingan är desynced med beräkningar gjort med spelet logik.
Därför spelet logik bör beställas först, men det lämnar några konstruktioner på beställning. Anta att godtyckliga besluten att kollision upptäckt ska hanteras först. Sedan, logiskt, player input hanteras någon gång efter det i slingan. I huvudsak kollisionen beräknas, och spelaren blir det att flytta. En motsägelse kan hittas i minst ett fall, men antar att py + h = by + 1, och spelaren är frenetiskt försöker flytta nedåt för att kompensera. Av definitionen av kollision detektorn händer inget i detta fall. Spelarens rörelse var förgäves, även om det skulle finnas utseendet från grafikmotorn som bör ha studsade bollen. Att motsättningen längre, skulle bollen då även se ut det genomskuren med paddeln om spelaren fortsätter till flyttningen nedåt. Detta skulle vara en frustrerande situation för spelare. Ingång ska därför hanteras någon gång före kollision upptäckt.
AI faller i en liknande situation som ovan. Om kollision upptäckt hanteras innan flyttar AI, som leder till samma problem. Därför måste kollision upptäckt ske efter både AI och spelaren ingång. När det gäller AI och spelaren ingång har inte betydelse; förflyttning av en är oberoende av den andra.
Men när ska bollen flytta? Tänk på att grafiken som uppdateras senast; den boll plats som visas av TV eller monitor är därför den senaste iterationen. Om programmet var att använda denna ståndpunkt för att kontrollera för kollisioner, då uppstår samma problem. Bollens läge måste därför uppdateras först.
Den sista beställning är:
1. bollen rörelse
2. spelaren Input
3. AI
4. kollision upptäckt
5. uppdatera skärmen av lek
Med lite motivation bakom hur spelet fungerar, låt oss börja med lite kod.