Hem Personliga finanser Hur man lägger till kollisioner i ditt HTML5-spel - dummies

Hur man lägger till kollisioner i ditt HTML5-spel - dummies

Innehållsförteckning:

Video: Java svenska spel - 10 - Räkna poäng 2024

Video: Java svenska spel - 10 - Räkna poäng 2024
Anonim

De mest intressanta sakerna i HTML5-videospel händer när sprites conk och kolliderar in i varandra. Spelmotorer har normalt ett slags verktyg för att testa om två sprites överlappar varandra. Detta kallas kollisionsdetektering , och det kan göras på ett antal sätt. I det här exemplet används standard gränsrektangel -schemat. Det är inte perfekt, men det är mycket enkelt att implementera och används vanligtvis.

Så här ställer du in kollisioner med begränsad rektangel i ditt spel

Ta en titt på colTest. html och du får se ett enkelt exempel.

I colTest. html exempel flyttar användaren critter med musen, och du får ett meddelande när critter röra rutan mitt på skärmen.

colTest. html checkCollisions (); rutan. uppdatering(); Nötkreatur. uppdatering ();} // slutuppdatering; funktionskontrollkollisioner () { om (rutan. CollidesWith (critter)) { utgång. innerHTML = "Kollision"; } annars { -utmatning. innerHTML = "Ingen kollision"; } // avsluta om } // slutkollisioner tom

Ett antal intressanta saker händer i denna kod:

  1. Dölj den normala muspekaren.

    När du ska ha något annat objekt följer musen, vill du normalt gömma den normala pilmarkören. I simpleGame, använd spelet. hideCursor () -metoden för att dölja muspekaren inuti spelskärmen.

  2. Skapa mer än en sprite.

    Det tar två att tango eller kollidera. I det här exemplet kommer lådan att vara stationär och en critter som följer musen.

  3. Ge critter en followMouse () -metod.

    I det här exemplet har du critter följ musen. Börja med att skapa en followMouse () -metod.

  4. Bestäm musens position.

    Muspositionen bestäms (i simpleGame. Js) med dokumentet. mouseX och dokument. mouseY egenskaper.

  5. Kopiera muspositionen till critterpositionen.

    Använd musens x-position för att ställa in critters x-position och upprepa med y.

  6. Ring till critters followMouse () -metod varje ram.

    Som vanligt är uppdateringen () -funktionen där du sätter kod som ska hända flera gånger.

Om du leker med colTest. html-sida kommer du förmodligen att märka att kollisionerna inte är exakta. Det är möjligt att ha ett kollisionsregister även när critter faktiskt inte rör rutan. Detta är viktigt eftersom simpleGame använder ett schema som heter bounding box-kollisioner .

Det här betyder att du faktiskt inte kontrollerar om bilderna kolliderar, men om rektanglarna runt bilderna kolliderar. I det här exemplet är skillnaden liten, men ibland ser du signifikanta fel med denna mekanism, särskilt med långa och tunna element. När en sprite roterar kan storleken på den begränsande rektangeln ändras.

Distansbaserade kollisioner för ditt spel

En alternativ form av kollisionsdetektering, kallad gränscirkel kollisioner, är tillgänglig. Med denna mekanism beräknar du bara avståndet mellan två sprites centrum, och om det värdet är mindre än något tröskelvärde, anser du att det är en kollision. Detta tillvägagångssätt har två fördelar:

  • Kollisionsavståndet är konstant. Avståndet mellan bildcentralerna ändras inte när bilder roteras, även om bilderna ändrar storlek.

  • Kollisionsgränsen kan varieras. Du kan ställa in vilken känslighet du vill ha. Ställ in en stor kollisionsradie för enkla kollisioner och en mindre när du vill att kollisioner utlöses endast när spritesna ligger väldigt nära varandra.

Sprite-objektet SimpleGame-biblioteket har en distanceTo () -metod som beräknar avståndet från en sprite till en annan. Du kan se ett exempel på den här koden på avstånd. html exempel:

avstånd. html var spel; var box; var critter; var utmatning; funktion init () {game = new Scene (); spel. hideCursor (); box = nytt Sprite (spel, "simpleBox. png", 50, 50); critter = New Sprite (spel, "critter. gif", 50, 50); output = dokument. getElementById ("output"); // ge rutan med fast position. setPosition (200, 150); låda. setSpeed ​​(0); Nötkreatur. setPosition (100, 100); Nötkreatur. setSpeed ​​(0); // critter kontrollerad av muskritiker. followMouse = funktion () {this. setX (dokument. mouseX); detta. setY (dokument. mouseY);} // end followMouse-spel. start ();} // end init-funktionen uppdatering () {game. klar(); Nötkreatur. followMouse (); checkDistance (); rutan. uppdatering(); Nötkreatur. uppdatering ();} // slutuppdatering; funktionskontrolldistans () { dist = box. distanceTo (nötkreatur); om (dist <50) { utgång. innerHTML = "Kollision:" + dist; } annars { -utmatning. innerHTML = "Ingen kollision:" + dist; } // slutet om } // slutkontrollavstånd tomt

Den distansbaserade kollisionsmetoden liknar väsentligen begränsningsrektangelversionen. Skapa en checkDistance () -funktion som kommer att fungera precis som de gamla checkCollisions (). Här är stegen för vad som händer i checkDistance:

  1. Hitta avståndet mellan de två spritesna.

    Använd spritens distanceTo () -metod för att bestämma avståndet mellan de två spritesna.

  2. Om avståndet är mindre än något tröskelvärde, räkna det som en kollision.

    Generellt bör du använda bredden på den mindre spriten som utgångspunkt för en kollisionströskel, men du kan justera detta för att göra kollisioner mer eller mindre troliga.

  3. Rapportera kollisionsstatus.

    I det här exemplet skriver du bara ut "kollision" eller "ingen kollision", men i ett riktigt spel utlöser kollisioner för andra åtgärder: öka poängen, minska antalet liv, ändra hastigheten eller positionen för de kolliderade elementen, eller vad som helst. (Förhoppningsvis innebär det explosioner.)

Hur man lägger till kollisioner i ditt HTML5-spel - dummies

Redaktörens val

Justering och justering av text i Word 2016 - dummies

Justering och justering av text i Word 2016 - dummies

Styckejustering i Word 2016-dokument har ingenting att göra med politik, och motiveringen har lite att göra med anledningarna till att lägga text i en paragraf. Istället hänvisar båda termerna till hur styckets vänstra och högra kanter ser på en sida. De fyra alternativen är vänster, center, rätt och fullständigt motiverad, ...

Hur man gör två kolumntext i Word 2016 - dummies

Hur man gör två kolumntext i Word 2016 - dummies

När man vill imponera på någon Med din text i Word 2016 kan du försöka sätta två kolumner på din sida. Några fler kolumner, och textbredden är för mager och svår att läsa. Två kolumner är dock ett bra sätt att bli snyggare och förbli läsbara. Starta ett nytt dokument. Eller om du ...

Hur man gör mellanslag mellan stycken i Word 2010 - dummies

Hur man gör mellanslag mellan stycken i Word 2010 - dummies

När man skriver i Word 2010, du don Du måste inte trycka på Enter två gånger för att lägga till extra mellanrum mellan punkterna. Word kan lägga till det här rummet automatiskt:

Redaktörens val

Outlook 2013 Adressböcker - dummies

Outlook 2013 Adressböcker - dummies

Outlook 2013 använder fortfarande flera olika Adressböcker som verkligen ingår i Microsoft Exchange Server. Adressböckerna har flera separata, oberoende listor över namn och e-postadresser - det är ganska förvirrande. Microsoft förenklade problemet med att hantera adressböcker i Outlook 2002 och senare versioner, men det hjälper inte om du använder ...

Outlook 2016 s Kontakter Hem Tab - dummies

Outlook 2016 s Kontakter Hem Tab - dummies

Outlook 2016s Kontakter är mer än bara en lista med namn och e-postadresser. Du kan utnyttja fliken Kontakter hem i Outlook 2016-bandet för att skapa nya kontakter, för att ordna hur du visar kontakterna du har, eller för att skapa e-postmeddelanden eller sammanslagningsdokument. Följande bild visar ...

Outlook Web Access - dummies

Outlook Web Access - dummies

Outlook Web Access är en del av ett program som heter Microsoft Exchange, vilket många stora och icke- så stora organisationer kör till avancerade Outlook-funktioner som offentliga mappar, delade kalendrar och tilldelade uppgifter. Inte alla företag som använder Microsoft Exchange erbjuder Outlook Web Access, men om du gör det kan du logga in på Outlook från nästan ...

Redaktörens val

Polering Ditt utvecklingsverktyg för kakaoprogrammering - dummies

Polering Ditt utvecklingsverktyg för kakaoprogrammering - dummies

Kakao är en typ av programmering som du kan utföra med Apples Utvecklarverktyg. Kakao är en samling verktyg och bibliotek som låter dig få ut det mesta av Mac OS X-programmeringen. Många funktioner gör Cocoa bra, bland annat följande: Modulär objektorienterad design Användning av ramar Visual interface design Varför program med ...

Snabba typer - dummies

Snabba typer - dummies

Swifts hantering av typer liknar andra språk, men varje språk har olika inriktningar och regler. I allmänhet har dessa regler att göra med de sätt som skrivs måste genomföras i fall där det finns tvetydighet. Hur mycket kostar språket (eller dess kompilator eller runtime bibliotek) för att säkerställa typkompatibilitet? Swift's approach ...

Klasserna Anatomi av en Swift Class - dummies

Klasserna Anatomi av en Swift Class - dummies

ÄR hjärtat i något objektorienterat programmeringsspråk. Till skillnad från klasser i mål-C och några andra språk behöver Swifts klasser ingen rubrikdeklaration. I stället får du hela klassen (eller struktur eller uppräkning) definitionen i ett format som detta: klass MyClass {var storedNumber: Int = 0 init (myNumber storedNumber: Int) {self. storedNumber = storedNumber ...