Hjem Personlig finansiering Hvordan du legger til kollisjoner i HTML5-spillet ditt - dummies

Hvordan du legger til kollisjoner i HTML5-spillet ditt - dummies

Innholdsfortegnelse:

Video: LIBGDX para Android - Tutorial 19 - Detectar Colisiones - How to make games Android 2024

Video: LIBGDX para Android - Tutorial 19 - Detectar Colisiones - How to make games Android 2024
Anonim

De mest interessante tingene i HTML5 videospill skjer når sprites conk og kolliderer inn i hverandre. Spillmotorer har normalt en slags verktøy for å teste om to sprites er overlappende. Dette kalles kollisjonsdeteksjon , og det kan gjøres på flere måter. Dette eksemplet bruker standard begrensende rektangel -skjema. Det er ikke perfekt, men det er veldig enkelt å implementere og brukes ofte.

Slik konfigurerer du begrensende rektangelkollisjoner i spillet ditt

Ta en titt på colTest. html, og du får se et enkelt eksempel.

I colTest. html eksempel, brukeren flytter critter med musen, og du får en melding når critter berører boksen midt på skjermen.

colTest. html checkCollisions (); boksen. Oppdater(); critter. oppdatering ();} // end oppdatering; funksjonskontrollkollisjoner () { hvis (boks. CollidesWith (critter)) { utgang. innerHTML = "Kollisjon"; } annet { utgang. innerHTML = "Ingen kollisjon"; } // slutt hvis } // sluttkontrollKollisjoner tom

En rekke interessante ting skjer i denne koden:

  1. Skjul den normale musemarkøren.

    Når du skal ha et annet objekt, følg musen, vil du normalt gjemme den normale pilmarkøren. I simpleGame, bruk spillet. hideCursor () -metoden for å skjule musemarkøren inne i spillskjermbildet.

  2. Lag mer enn ett sprite.

    Det tar to å tango, eller kolliderer. I dette eksemplet vil boksen forbli stasjonær og en critter som følger musen.

  3. Gi critter en followMouse () metode.

    I dette eksemplet har du critter følge musen. Begynn med å opprette en followMouse () -metode.

  4. Bestem musens posisjon.

    Musposisjonen bestemmes (i simpleGame. Js) med dokumentet. mouseX og dokument. mouseY egenskaper.

  5. Kopier museposisjonen til critter-posisjonen.

    Bruk musens x-posisjon for å sette critterens x-posisjon, og gjenta med y.

  6. Kall critter's followMouse () metode hver ramme.

    Som vanlig er oppdateringen () -funksjonen der du setter kode som skal skje gjentatte ganger.

Hvis du leker med colTest. html side, vil du sannsynligvis merke at kollisjonene ikke er nøyaktige. Det er mulig å få et kollisjonsregister selv når critter ikke faktisk berører boksen. Dette er viktig fordi simpleGame bruker et skjema kalt grensebokskollisjoner .

Dette betyr at du faktisk ikke sjekker for å se om bildene kolliderer, men om rektanglene rundt bildene kolliderer. I dette eksemplet er forskjellen mindre, men du vil noen ganger se betydelige feil med denne mekanismen, spesielt med elementer som er lange og tynne. Når et sprite roterer, kan størrelsen på det begrensende rektangel endres.

Avstandsbaserte kollisjoner for spillet ditt

En alternativ form for kollisjonsdeteksjon, kalt grensesnitt kollisjoner, er tilgjengelig. Med denne mekanismen beregner du bare avstanden mellom midten av to sprites, og hvis verdien er mindre enn noen terskel, anser du det for en kollisjon. Denne tilnærmingen har to fordeler:

  • Kollisjonsavstanden er konstant. Avstanden mellom bildesentre vil ikke endres når bilder roteres, selv om bildene endrer størrelse.

  • Kollisjonsterskelen kan varieres. Du kan angi hvilken følsomhet du vil ha. Sett en stor kollisjonsradius for enkle kollisjoner og en mindre når du vil at kollisjoner skal utløses bare når sprites er svært nær hverandre.

Sprite-objektet SimpleGame-biblioteket har en distanceTo () -metode som beregner avstanden fra ett sprite til et annet. Du kan se et eksempel på denne koden i det fjerne. html eksempel:

avstand. html var spill; var boks; var critter; var utgang; funksjon init () {game = new Scene (); spill. hideCursor (); boks = ny Sprite (spill, "simpleBox. png", 50, 50); critter = ny Sprite (spill, "critter.gif", 50, 50); output = dokument. getElementById ("output"); // gi boksen fast posisjon boks. setPosition (200, 150); eske. setSpeed ​​(0); critter. settposisjon (100, 100); critter. setSpeed ​​(0); // critter kontrollert av mus critter. followMouse = funksjon () {dette. setX (dokument. mouseX); dette. setY (dokument. mouseY);} // end followMouse spill. start ();} // end init funksjon oppdatering () {spill. klar(); critter. followMouse (); checkDistance (); boksen. Oppdater(); critter. oppdatering ();} // end oppdatering; funksjonskontrollavstand () { dist = boks. avstand distanceto (critter); hvis (dist <50) { utgang. innerHTML = "Kollisjon:" + dist; } annet { utgang. innerHTML = "Ingen kollisjon:" + dist; } // slutten hvis } // end checkCheckDistance empty

Den avstandsbaserte kollisjonsmetoden ligner veldig på grense-rektangelversjonen. Opprett en checkDistance () -funksjon som vil fungere som de gamle kontrollkollisjonene (). Her er trinnene for hva som skjer i checkDistance:

  1. Finn avstanden mellom de to sprites.

    Bruk spritens distanceTo () -metode for å bestemme avstanden mellom de to sprites.

  2. Hvis avstanden er mindre enn noen terskel, teller den som kollisjon.

    Generelt bør du bruke bredden på den mindre sprite som utgangspunkt for en kollisjonsterskel, men du kan justere dette for å gjøre kollisjoner mer eller mindre sannsynlige.

  3. Rapporter kollisjonstilstanden.

    I dette eksemplet skriver du bare ut "kollisjon" eller "ingen kollisjon", men i et ekte spill er kollisjoner utløsere for andre handlinger: øke poengsummen, redusere antall liv, endre hastigheten eller posisjonen til de kolliderte elementene, eller hva som helst. (Forhåpentligvis involverer det eksplosjoner.)

Hvordan du legger til kollisjoner i HTML5-spillet ditt - dummies

Redaktørens valg

Topp 5 Fantasy Baseball Sites - Dummies

Topp 5 Fantasy Baseball Sites - Dummies

Hvis du er en stor fantasy baseball fan og ser ut til å bli med i verden av online fantasy sport, så se ikke lenger. Følgende liste inneholder de fem beste fantasybaseball-nettstedene i henhold til nettstedslayout, oppdatert statistikk, utenfor råd og hjelp og teamstyringsalternativer.

Hva skal man gjøre som en baseball coach - dummies

Hva skal man gjøre som en baseball coach - dummies

Som en baseball trener, du ikke bare må lede teamet ditt, du må ta med forsyninger for å praktisere. Du vil kanskje øke følgende liste, men den inneholder grunnleggende for å få til alle baseballpraksis: Riktig lager førstehjelpsutstyr Ekstra vann Øvelsesplan for dagen, oppdelt etter tid ...

Får utrustet til å spille baseball - dummies

Får utrustet til å spille baseball - dummies

Når du tar baseballfeltet, bør du ta med det beste utstyret som er tilgjengelig. Du trenger ikke å bruke store summer til å kjøpe toppkvalitets tilbehør så lenge du vet hva du skal se etter og hvor du skal finne den. Med mindre du er under 10 år, kjøp utstyr som oppfyller alle de store ligaspesifikasjonene. ...

Redaktørens valg

Hvordan du finner ditt nivå av oppmerksomhet - dummies

Hvordan du finner ditt nivå av oppmerksomhet - dummies

Du kan sikkert ta noen form for ikke-tradisjonell trening og dump det i en tønne merket "mind-body. "Det er greit hvis du foretrekker enkelhet og ikke vil bli innpakket med kategorisering og vurdering. Men du kan også kikke på treningsprogrammer på et dypere nivå, vurdere omfanget av oppmerksomhet i en ...

Hvordan du får mest mulig ut av din meditasjon - dummies

Hvordan du får mest mulig ut av din meditasjon - dummies

For å få mest mulig ut av meditasjonspraksis må forplikte seg til det. Når du begynner å meditere regelmessig, kan du høste utallige fordeler - fra lavere stress og kolesterol til høyere nivåer av tilfredshet og lykke. Her er noen tips for å maksimere meditasjonspraksis: Meditere jevnlig - helst hver dag. Sett bort en ...

Redaktørens valg

Slik bruker du det nye perspektivet i Adobe Illustrator CS6 - dummies

Slik bruker du det nye perspektivet i Adobe Illustrator CS6 - dummies

I Adobe Illustrator CS6 Du kan opprette og redigere kunstverk basert på perspektivgitterfunksjonen (introdusert i CS5). Gitteret er en stor hjelp i å skape vellykkede perspektivillustrasjoner. For å vise eller skjule standardperspektivruten, trykk Ctrl + Shift + I (Windows) eller Kommando + Skift + I (Mac). Du kan bruke verktøyet Perspective Grid på verktøylinjen til å ...

Hvordan å pakke inn tekst ved hjelp av AdobeCS5 Illustrator - dummies

Hvordan å pakke inn tekst ved hjelp av AdobeCS5 Illustrator - dummies

Ved hjelp av en tekstbrytestil i Adobe Creative Suite 5 (Adobe CS5) Illustrator-prosjektet er en enkel måte å legge til litt kreativitet. En tekstpakke tvinger tekst til å vikle rundt en grafikk.

Hvordan du bruker Life Paint-funksjonen i Adobe Illustrator CS6 - dummies

Hvordan du bruker Life Paint-funksjonen i Adobe Illustrator CS6 - dummies

Ikke bekymre deg om å fylle lukkede figurer eller la filler flykte fra objekter med hull i uønskede områder. Ved å bruke Live Paint-funksjonen til Adobe Illustrator CS6, kan du lage det bildet du ønsker og fylle ut regioner med farge. Live Paint-bøtta registrerer automatisk regioner som er sammensatt av uavhengige kryssende baner og fyller dem tilsvarende. Malingen ...