Stap 10: Program Structure - spel lus
Het belangrijkste onderdeel van elk spel, het spel lus van timing, moet onberispelijk op veel van de oudere systemen en platforms. De Atari 2600, bijvoorbeeld, had 76 cycli van de processor naar alles op het spel logica, die geluid ook bevat. De verwerkers van vandaag zijn veel sneller, en timing is alleen een echte aandacht voor afbeeldingen duwen de envelop van de hardware.Voor de toepassing van deze discussie, elke iteratie van de lus in het spel komt overeen met de tekening van een enkel frame en is getimed op ongeveer 30 frames per seconde wordt uitgevoerd. De game lus moet omgaan met alles, elke iteratie, maar blijven binnen de grenzen van de televisie of monitor VSYNC. De VSYNC is de langste periode van tijd dat de monitor of televisie is inactief en niet tijdens het opnieuw tekenen van het scherm. Probeert te schrijven naar videogeheugen, terwijl de monitor of televisie is probeert te lezen zal leiden tot hardware voorwaardelijke gebeurtenissen, scherm scheuren of andere grafische afwijkingen.
Wat is het eerste ding de spel lus moet omgaan? Stel voor een moment, dat alle van de spel constructies zijn onderverdeeld in het spel logica en de grafische engine. Door de code van de grafische voorop, en vervolgens verwerken, bijvoorbeeld speler ingang, een probleem ontstaat. Het probleem vloeit voort uit de initialisatie-fase. In wezen, de grafische engine zal hebben berekend het eerste frame voordat de lus eigenlijk begint en dan trekt het eerste frame opnieuw tijdens de eerste iteratie van de lus in het spel. Nu, het spel logica wordt berekend, maar het huidige frame in de lus is desynced met de berekeningen gedaan met het spel logica.
Dus, het spel logica moet eerst worden besteld, maar dat laat een paar constructies te bestellen. Stel dat de willekeurige beslissing is gemaakt dat de botsingdetectie moet eerst worden behandeld. Vervolgens, logisch, de speler input ergens na de wordt behandeld die in de lus. In wezen, de botsing wordt berekend, en dan krijgt de speler te bewegen. Een tegenstrijdigheid kan worden gevonden in ten minste één geval, maar stel dat py + h = by + 1, en de speler is verwoed probeert te verplaatsen naar beneden te compenseren. Door de definitie van de detector van de botsing, gebeurt er in dit geval geen botsing. Van de speler beweging was tevergeefs, ook al zou er het uiterlijk van de graphics engine die de bal moet hebben teruggestuurd. De tegenstrijdigheid verdere, zou de bal dan zelfs eruit het doorsneden met de peddel, als de speler verder naar beneden verplaatsen. Dit zou een frustrerende situatie voor de speler. Daarom worden behandeld als de input ergens vóór de botsingdetectie.
De AI valt in een soortgelijke situatie zoals hierboven. Als botsingdetectie wordt verwerkt voordat de AI wordt verplaatst, dat leidt tot hetzelfde probleem. Dus, de botsingdetectie moet gebeuren na zowel de AI en de speler input. De orde met betrekking tot de AI en de speler ingang maakt niet uit; de beweging van een is onafhankelijk van de andere.
Maar wanneer moet de bal verplaatsen? Houd er rekening mee dat de afbeeldingen worden bijgewerkt laatst; Daarom is de locatie van de bal die momenteel worden weergegeven door de televisie of monitor de vorige iteratie. Als het programma deze positie gebruiken om te controleren voor botsingen moest, dan ontstaat hetzelfde probleem. Daarom moet de bal de locatie eerst worden bijgewerkt.
De uiteindelijke volgorde is:
1. Ball beweging
2. speler Input
3. AI
4. botsing detectie
5. het bijwerken van het scherm van het spel
Met sommige motivatie achter hoe het spel werkt, laten we beginnen met enkele code werkt.