Pong på XGS bild (7 / 36 steg)
Steg 7: Spelet konstruktioner - spelet logik - kollision upptäckt genomförandet
När du arbetar i 2-dimensionell rymd, är genomförandet faktiskt en aning enklare. Stället har en slinga kolla varje möjligt Tangerande punkt på både objekt eller kanter, kontroll av högst två punkter kommer att räcka i alla fall.Fokus på de övre och nedre kanterna, (x, 0) och (x, Y - s) är de enda möjliga Tangerande punkterna, där 0 < = x < = X. kom ihåg att varje objekt representeras logiskt av ett ordnat par som är dess längst upp till vänster. Om bollens läge (bx, by) och om by= 0, då bollen är tangent till överkanten på skärmen. Detta krävs endast en jämförelse att räkna ut när du ska ändra till den nedåtgående staten. Också, om by = Y - s, då den boll måste också ändra dess tillstånd att flytta uppåt.
De vänstra och högra kanterna är lika enkla. Minns att (0, y) och (X - s, y) är de möjliga Tangerande punkterna, där 0 < = y < = Y. Nästa steg är att jämföra bx till 0 och X - s. Om bx är lika med något av dessa värden, har då scoring villkoret inträffat. Troligt, kommer bollen att återställas för att fortsätta spela.
Den sista uppsättningen av fall, när bollen kolliderar med paddeln, är bara lite svårare. Låt (px, py) vara den aktuella platsen för paddeln. Fokusera på vänster paddeln, är den första sak att kontrollera rätt x-koordinater. För vänster paddla, alla möjliga vertikala Tangerande punkter ligga på (px + w, y), där 0 < = y < = Y. logiskt, om px + w = bx, sedan en kollision kan förekomma. Det finns några andra punkter att kontrollera.
Nästa steg är att jämföra de y-koordinaterna. Grafiskt, sker en kollision exakt när någon pixel bollen är mellan övre och nedre kanter på paddeln. Från föregående avsnitt på kollision upptäckt, kan alla möjliga Tangerande punkter beskrivas som alla punkter mellan (px + w, py) och (px + b, py + h) om h är höjden på paddeln. Vid denna punkt, är det möjligt att förenkla algoritmen genom att jämföra bara två poäng. Om det övre vänstra hörnet eller nedre vänstra hörnet är tangent till att paddla, då det måste finnas minst en punkt i bollen som visuellt ser ut som kolliderar det med paddeln. Genom att kontrollera dessa två punkter, kontrollerar algoritmen som alla punkter på vänster sida av bollen implicit. Högra paddeln fungerar på ett liknande sätt, förutom punkterna att kontrollera är topp - och botten-rätt hörn av bollen, Funna vid (bx + s, by) och (bx + s, by + s).
Vid genomförandet av kollision upptäckt, ordningen på jämförelser frågor. Beräkningar, och därför tid, kan sparas genom att kontrollera de viktiga punkterna i en viss ordning. Ta till exempel vänster paddeln. Antag att y-koordinaterna var kontrolleras först i algoritm. Av naturen är det ett komplicerat uttryck i många programmeringsspråk. Efter detta uttryck är markerad, skulle nästa steg vara att jämföra x-koordinater. Vid körning, kan det vara troligt att spelaren är efter bollen tätt längs det vertikala planet, så den första jämförelsen blir sant åtminstone ett par gånger under uppspelning, även när bollen är på andra sidan av skärmen. X-koordinaten uttrycket, dock sant exakt en gång för en hel del ramar. Om jämförelser var vänt, kostsamma y-koordinaten beräkningen kan sparas för att användas endast exakt när det behövs, eftersom det kanske råkar vara sant ett par gånger när det inte behövs.
Därför kollision upptäckt för paddlar ser ut ungefär så här:
1. Kontrollera om bx = px
2. Markera om by < = py och by < = py + h, eller om by + s < = py och by + s < = py + h
3. ändra bollens staten
Varje efterföljande steg måste vara sant att fortsätta till nästa. Skärm kanten kollisioner fungerar exakt enligt beskrivningen, eftersom det finns bara en enda punkt att kontrollera.