Video: LIBGDX para Android - Tutorial 19 - Detectar Colisiones - How to make games Android 2025
Når sprites begynder at flytte, er der altid mulighed for, at de vil forlade skærmens grænser. Typisk svarer HTML5-spiludviklere på en af fem måder: Indpakning, afvisning, stop, dø eller fortsæt. SimpleGame-biblioteket har en grænsekontrolrutine, der giver dig mulighed for at angive, hvilken af disse standardadfærd der skal bruges. Sprite's boundAction-egenskab angiver, hvilken handling der skal anvendes. Du kan bruge grænsekontrolleren til at gøre følgende:
-
Bestem grænserne.
Grænserne bestemmes af lærredbredden.
-
Kontroller, om brugeren er slukket for en grænse.
Så blev der foretaget en anden række variabler, der indeholder boolske værdier, der angiver, om sprite er slukket fra en af grænserne: OffRight, offLeft, offTop og offBottom. Brug grundlæggende hvis-sætninger til at bestemme, om sprite er slukket på skærmen på en af disse måder.
-
Bestem grænsevirkningen.
Brug en simpel if-sætning til at bestemme hvilken grænsehandling der for øjeblikket er indstillet til sprite.
-
Hvis boundAction er WRAP:
Skift x eller y-variablen til den modsatte side, men lad dx og dy-værdierne være alene.
-
Hvis boundAction er BOUNCE:
Inverter dy, hvis spriteen hoppede ud øverst eller nederst, og dx, hvis spriteen skubbede ud til venstre eller højre. Det er ikke nødvendigt at ændre x eller y direkte.
-
Hvis boundAction er STOP:
Indstil hastigheden til nul, uanset hvilken grænse der blev afbrudt.
-
Hvis boundAction er DIE:
Indstil hastigheden til nul og aktiver spriteens hide () -metode. Dette vil medføre, at sprite forsvinder og ikke længere overvejes i kollisionsberegninger.
-
Enhver anden grænse betragtes som FORTSAT.
Her er der ingen handlinger, fordi sprite vil fortsætte med at bevæge sig selvom det ikke er synligt. Hvis dette er den ønskede effekt, skal du på en eller anden måde angive brugeren, hvor sprite er, eller give en måde til, at sprite vender tilbage.
Her er en del af koden til kollisionskontrolrutinen:
offRight = false; offLeft = false; offTop = false; offBottom = false; hvis (denne. x> rightBorder) {offRight = true;} hvis (denne. x bottomBorder) {offBottom = true;} hvis (denne. y <0) {offTop = true;} hvis (denne. boundAction == WRAP) {if (offRight) {this. x = leftBorder;} // ende hvis hvis (offBottom) {this. y = topBorder;} // ende hvis hvis (offLeft) {this. x = rightBorder;} // ende hvis hvis (offTop) {this. y = bottomBorder;}} ellers hvis (denne. boundAction == BOUNCE) {hvis (offTop || offBottom) {this.dy * = -1; det her. calcSpeedAngle (); det her. imgAngle = dette. moveAngle;} hvis (offLeft || offRight) {this. dx * = -1; det her. calcSpeedAngle (); det her. imgAngle = dette. moveAngle;}} ellers hvis (denne. boundAction == STOP) {hvis (offLeft || offRight || offTop || offBottom) {this. setSpeed (0);}} ellers hvis (denne. boundAction == DIE) {hvis (offLeft || offRight || offTop || offBottom) {this. skjule(); det her. setSpeed (0);}} ellers {// fortsæt for evigt}} // end checkbounds
Hvis du vil ændre en sprite grænsehandling i simpleGame, kan du bruge metoden setBoundAction () til at gøre det.
Bemærk, at nogle situationer kan kræve forskellige adfærd. For eksempel kan du ønsker at pakke rundt om siderne, men stop øverst eller nederst. Hvis du har brug for en mere specifik adfærd, skal du bare bygge en ny checkBounds () metode til din sprite. Du skal dog kontrollere alle grænser, fordi din nye checkBounds () vil overskrive den, der er indbygget i simpleGame.