Stap 6: Spel constructies - spel Logic - botsingdetectie
De bal heeft nu een manier om te bewegen op een voorspelbare wijze, maar hoe de bal de overgang tussen de verschillende lidstaten? Logischerwijs, bepaalde spel gebeurtenissen zal dicteren de overgangen, maar de volgende stap is om te bepalen wanneer de veranderingen gebeuren en aan precies welke staat. Met dit ontwerp van Pong, wat er moet gebeuren wanneer de bal de boven,- en, naar analogie, onderin het scherm spelen raakt? Breken dit verder te raken van de bovenkant van het scherm, moet de bal omhoog verplaatst worden. Om te simuleren een stuiterende effect, moet de bal worden verschoven naar de neerwaartse richting. Wanneer de verschillende bal-Staten hierboven beschreven werden, de bal heeft twee neerwaartse Staten: hetzij links of rechts.
Analyse moet Ga nu verder in een geval per geval. Daarom nemen de bal gaat naar boven en links net voor de botsing. Verplaatsen naar beneden is de volgende logische stap, maar moet het bewegende links blijven of overschakelen naar rechts verplaatsen? Mochten de bal om de overgang naar een staat van recht voortbewegende, zou de bal omkeren de richting langs de diagonaal die het vandaan kwam, nooit verhuizen naar de andere kant van het scherm. De enige manier voor het bereiken van de andere kant van het scherm van het spel is te blijven bewegen in een linkse richting. Een soortgelijke situatie geldt wanneer de bal naar boven gaat en rechts: verder naar rechts verplaatst en schakel over naar een neerwaartse richting. De neerwaartse gevallen worden symmetrisch behandeld.
Precies wanneer deze overgang wijzigingen gebeuren? Dit houdt onder meer de definitie van een botsing: twee objecten op sommige staat snijpunt zouden botsen. In geval van dit spel zal met de objecten daadwerkelijk elkaar snijden met elkaar leiden tot grafische afwijkingen; de exacte status van snijpunt zal dus wanneer de objecten zijn raaklijn aan elkaar, of gewoon aanraken maar niet overlappen.
Een bespreking van het coördinaat vliegtuig is nu in orde. In vele talen, plotten pixels werkt op een soortgelijke manier. Elke eenheid in een geordend paar is een pixel met de x-coördinaat meten de hoeveelheid pixels vanaf de linker begrenzing van het scherm en afhankelijk van de y-coördinaat meten van de afstand van de bovenkant van het scherm. Laat de huidige resolutie x x Y, waarbij X, Y > = 0. X beschrijft de maximale breedte van het scherm terwijl Y de hoogte van het scherm geeft. De linker bovenhoek van het scherm is (0, 0), terwijl de onderst-juiste hoek is (X, Y). Wanneer u wilt uitzetten een punt 40 pixels links en 20 pixels naar beneden, gebruiken het geordend paar (40, 20). Dus de bovenste regel van het scherm kan worden omschreven als (x, 0), terwijl de lijn van het scherm kan worden aangeduid met (x, Y), waarbij 0 < = x < = X (Zie Figuur 1).
Het blijkt dat (x, 0) en (x, Y) zijn de punten van de botsing binnen het scherm van het spel. Voor de voormalige, het bovenste gedeelte van de bal raakt aan de bovenrand van het scherm van het spel, en de bal moet omzetten in de juiste staat voordat daadwerkelijk elkaar kruisen met de bovenrand. Aangezien alle onze spel-objecten worden beschreven met top links hoeken, zal elk doel van het spel in gegevens met een soort van coördinaten worden vertegenwoordigd. De onderste rand geval werkt dan ook maar met één klein probleem. Als de bal de locatie ooit gelijk is aan (x, Y), dan het moet al worden de doorsnede van de onderste rand van het scherm spel. Aangezien de bal een plein met een constante lengte s is, kan de exacte tangent punt nu gemakkelijk worden berekend. Door af te trekken s van Y, geeft de hoogte van het scherm het punt waar de bal de onderrand raaklijn aan de onderkant van het scherm spel is. Die dit in de vorm van coördinaten, elk punt van de mogelijke botsing kan worden vertegenwoordigd door (x, Y - s).
Een soortgelijke set van botsingen vloeit voort uit het geval wanneer de bal en paddle niet botsen; Kortom, het scoren voorwaarde. Met behulp van de definitie van het coördinaat vliegtuig (0, y) en (X, y) moet de grenzen van het linker- en rechterkant van het scherm van het spel, waarbij 0 < = y < = Y. Aangezien linksboven hoeken van objecten worden gebruikt voor het definiëren van hun locatie, de definitie van de linkerrand, (0, y), kan worden gebruikt voor het vinden van de raakpunten. Net als bij het vinden van botsing punten voor de boven- en onderkant randen, één geval gebruikt de definitie van een rand maar een offset moest worden gebruikt om te zoeken naar de exacte tangent oriëntatiepunt. Als de bal de locatie moest gelijk (X, y), de bal zou hebben al doorsneden met de rechterrand. Aangezien de bal een breedte van s heeft, levert (X - s, y) alle van de raakpunten met de rechterkant van het scherm spel.
Alle van de botsingen van de rand scherm hebben nu expliciet behandeld. De laatste twee gevallen zijn iets moeilijker, zoals dit is wanneer de bal met de paddles aan de linker- en rechterkant van het scherm botst. De berekening is vergelijkbaar met wanneer u werkt met de muur-achtige bovenste en onderste randen van het scherm van het spel, maar de muur wordt nu begrensd, of heeft een zeer specifieke lengte. Waar kan de bal met een peddel eigenlijk botsen?
Eerst, overwegen de linker peddel. Laat h aanduiding van de hoogte van de peddel en w beschrijven de breedte in pixels. Stel dat (pxpy) is de locatie van de peddel en (bx, b,y) beschrijven de locatie van de bal. (Vergeet niet, dit zijn de top links hoeken.) Om te zoeken naar het punt van de botsing, moet de rechterrand van de peddel worden gebruikt. Aangezien de breedte van de peddel is een constante, (px + w, py) de hoogste-juiste hoek van de peddel zal opleveren. Dit is nu de bovengrens van de mogelijke botsing punten met de peddel. Vinden van de lagere juiste hoek zal opleveren van de ondergrens, en dus maken alle mogelijke punten waar de bal kan botsen met de peddel. Aangezien de hoogte van de peddel een constante is, kan de rechterbenedenhoek worden gevonden door het combineren van de berekening van de rechterrand en h, opbrengst (px + w, py + h). Eigenlijk om te controleren of de botsing, vergelijk de locatie (bx, b,y) met (px + w, py + h). Dus wanneer bx = px + w en py < by = < = py + h, een botsing optreedt (Zie Figuur 2).
De juiste peddel heeft een symmetrische probleem met de berekeningen. Aangezien de linker bovenhoek wordt gebruikt voor het vertegenwoordigen van de locaties, de linker rand is praktisch gezien, dus alle punten tussen (pxpy) en (px, py + h) zijn de mogelijke raakpunten. Maar nu de rechterrand van de bal is nodig om te vinden van de botsing. Aangezien s is de lengte van een zijde van de bal, levert bx+ s de hoogste juiste hoek van de bal. De bovenstaande redenering kan nu werken, zodat de botsing precies plaatsvindt wanneer bx + s = px en py < by = < = py + h.
Een laatste ding verlaten om te bespreken: wat er moet gebeuren wanneer de bal met de peddels botst? Als de bal botst met de peddel, dan de horizontale staat moet om over te schakelen, anders zou de bal gaan via de peddel. De volgende duidelijke vraag betreft de verticale stand van de bal. Stel dat de bal gaat omhoog; vervolgens mochten de bal spiegelen de verticale staat, of naar beneden gaan, zou vervolgens de bal terugkeren zijn dezelfde diagonale weg omdat de bal de horizontale staat draait. Daarom is de verticale staat hetzelfde moet.
Een interessante tendens kan nu worden opgemerkt tussen de relaties met de botsingen en de Staten van de bal. Als de bal met de bovenste of onderste rand botst, spiegelen de verticale staat. Als de bal alsof het met een van de peddels, een linker- of rechterrand botst, spiegelen de horizontale stand.