Stap 23: Bal Demo - spel lus
In de game lus terecht. Alle logische bewerkingen van het spel moeten gebeuren tijdens de VSYNC van het beeldscherm om te voorkomen dat de hardware voorwaardelijke gebeurtenissen en grafische anomalieën. De grafische kunst wagenmenner bieden twee ongelooflijk nuttige functies, WAIT_FOR_VSYNC_START() en WAIT_FOR_VSYNC_END(), dat, zolang de code niet over de cyclus te beperken gaat, ervoor dat het spel lus niet iets productief doet zorgen kunnen terwijl het scherm is in het proces wordt weergegeven. Elke iteratie van de lus in het spel begint met WAIT_FOR_VSYNC_START() en eindigt met WAIT_FOR_VSYNC_END(). Alles is ingeklemd tussen deze twee functieaanroepen.Zoals eerder is beschreven, is de eerste stap in de game lus te verplaatsen van de bal. Dit houdt controle van de staat en vervolgens in de juiste richting te bewegen. Gewoon verhogen en verlagen de locatie variabelen is niet genoeg, zoals de bal moet blijven binnen het scherm van het spel. Vandaar de bal beweging en botsing detectie voor de hogere, lagere, meest linkse en rechtse grenzen zijn onlosmakelijk verbonden. Vergelijkingen kunnen worden opgeslagen door de controle van de staat eerst, dan uitzoeken als de bal moet verplaatsen of wijzigen van de status. De verticale en horizontale Staten moeten apart worden gecontroleerd aangezien zij zelfstandig opereren. Botsingen aan de grenzen van de linker- en rechterkant van het scherm zijn de scoren voorwaarden, maar voor nu, hebben de bal stuiteren rond het scherm is het doel van deze demo. De vergelijkingen ingeklemd tussen de VSYNC functies moeten er ongeveer zo uitzien:
if (state_y == BALL_UP) if (ball_y == 0) state_y = BALL_DOWN; else ball_y--; else if (ball_y+BALL == SCREEN_HEIGHT) state y = BALL_UP; else ball_y++; if (state_x == BALL_LEFT) if (ball_x == 0) state_x = BALL_RIGHT; else ball_x--; else if (ball_x == SCREEN_WIDTH-BALL) state_x = BALL_LEFT; else ball_x++;