Build et fly spill med Sprite Kit - Eksplosjoner og Clouds
3
Del
3
Del
Denne Cyber Monday Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
Denne opplæringen vil lære deg hvordan du bruker Kit rammeverket Sprite å lage en enkel Airplanes spill. Underveis vil du lære alle de sentrale begrepene Sprite Kit: animasjoner, emittere, dueller, og mer
Serie Format
Airplanes opplæringen vil være delt i tre deler for å fullstendig dekke hver seksjon. Etter å ha lest den tre deler opplæringen, vil leserne kunne skape et interessant 2D spill med den nye Sprite Kit rammeverk levert med iOS 7.
Bygg et fly spill med Sprite Kit - Prosjektoppsett
Bygg et fly spill med Sprite Kit - Fiender & Emittere
Bygg et fly spill med Sprite Kit - Eksplosjoner og amp; Skyer
Hver del vil gi et praktisk resultat, og summen av alle delene vil gi det endelige spillet. Mens hver del av serien kan leses uavhengig av hverandre, anbefaler vi å følge med trinn-for-trinn for en fullstendig forståelse av emnet presenteres. Kildekoden for spillet gis trinnvis med hvert innlegg
Final Forhåndsvisning
Illustrasjon Endelig resultat -.. Sprite Kit
der vi slapp Off ...
Velkommen tilbake til den tredje delen av vår fly spill med Sprite Kit. I vårt siste innlegg, fokuserte vi på å legge til fiender og emittere til spillet. I dagens tutorial, vil du programmere dueller, jobbe med en tekstur atlas, og skape noen eksplosjoner for å fullføre spillet. La oss komme i gang!
1. Legge Collision Detection
Intersection tester brukes ofte i miljøer der mer enn ett objekt eksisterer. I Sprite Kit, vil du bruke Kollisjoner og Kontakter å oppdage hvis et gitt objekt treffer et annet objekt.
I dette spillet, vil du bruke dueller. Når en kule kommer i kontakt med én fiende, vil både kule og fienden fjernes fra skjermen.
For å gjøre dette, må du definere kategori maske verdier. Det bør være en kategori for hver fysikk objekt. I MyScene.h, legge til følgende kode:
statisk const uint8_t bulletCategory = 1; statisk konst uint8_t enemyCategory = 2;
Nå, mens fortsatt innenfor MyScene.h, legger SKPhysicsContactDelegate som vi gjorde før med UIAccelerometerDelegate <. br>interface MyScene: SKScene < UIAccelerometerDelegate, SKPhysicsContactDelegate > {
Før du kan bruke fysikk, må du starte fysikk innstillinger. På if (selv = [super initWithSize: size]) betinget, instantiate alvoret med en 0-verdi (dvs. ingen tyngdekraft) og deretter kontakten delegat:
self.physicsWorld.gravity = CGVectorMake (0, 0); selv .physicsWorld.contactDelegate = selv;
De to kropper som trenger fysikk er i kule og fiender. La oss sette flere egenskaper for hver enkelt. La oss legge koden under innenfor - (åpne) EnemiesAndClouds metode:
enemy.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize: enemy.size]; enemy.physicsBody.dynamic = JA; enemy.physicsBody.categoryBitMask = enemyCategory; enemy.physicsBody. contactTestBitMask = bulletCategory; enemy.physicsBody.collisionBitMask = 0;
Koden ovenfor sier at kontaktområdet av flyet vil være et rektangel som er på størrelse med fienden sprite. Den dynamiske egenskap indikerer om fysikken legemet blir beveget av fysikk simulering. Deretter er det categoryBitMask hvor du setter kategorien til objektet, og contactTestBitMask viser til hvilke instanser fiender vil samhandle med (i dette tilfellet med kuler).
Nå la oss definere fysikken for kulen objektet. Innenfor - (void) touchesBegan: (NSSet *) berører withEvent: (UIEvent *) hendelse metoden, bullet-koden skal endres for å legge til:
bullet.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize: bullet.size]; bullet.physicsBody .dynamic = NO; bullet.physicsBody.categoryBitMask = bulletCategory; bullet.physicsBody.contactTestBitMask = enemyCategory; bullet.physicsBody.collisionBitMask = 0;
Så langt du har definert egenskapene for kollisjoner. Men vi må oppdage om en kontakt.
Du må bruke metoden didBeginContact å vite hvilke objekter har kontakt med andre objekter. Så beregner følgende kode de to organene som har kontaktet og samtidig fjerner dem fra scenen: Anmeldelser - (void) didBeginContact: (SKPhysicsContact *) kontakt {SKPhysicsBody * firstBody; SKPhysicsBody * secondBody; if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask) {firstBody = contact.bodyA; secondBody = contact.bodyB; } Else {firstBody = contact.bodyB; secondBody = contact.bodyA; } If ((firstBody.categoryBitMask &! BulletCategory) = 0) {SKNode * prosjektil = (contact.bodyA.categoryBitMask & bulletCategory)? contact.bodyA.node: contact.bodyB.node; SKNode * fiende = (contact.bodyA.categoryBitMask & bulletCategory)? contact.bodyB.node: contact.bodyA.node; [prosjektil runAction: [SKAction removeFromParent]]; [fiende runAction: [SKAction removeFromParent]]; }}
Ganske enkelt, ikke sant? Nå, bygge og drive. Hvis alt gikk riktig, vil da fienden og kule forsvinner når de kolliderer.
2. Innlemming en Texture Atlas
Spillet vårt er nesten ferdig, men trenger litt action og animasjon. De to neste trinnene vil legge eksplosjoner og noen bakgrunns animasjoner laget av skyer.
Så langt har vi ikke brukt Texture Atlas. Sprite Settet inneholder en tekstur atlas generator som har flere interessante funksjoner. I Xcode 5, kan du lage en tekstur atlas med følgende fremgangsmåte:
- Endre forlengelse av mappen til * .atlas. I vårt tilfelle, endre navn EKSPLOSJON å EXPLOSION.atlas.
- Dra-og-slipp mappen inn i prosjektet. Jeg har lagt det til Supporting Files-mappen i Xcode navigator.
- Kontroller at alternativet "Aktiver Texture Altas Generation" er på. For å sjekke dette, gå til oppbygging Innstillinger av prosjektet.
Det var det. Igjen, bildene for denne delen er tilgjengelige innenfor Resources mappen på vedlagte nedlasting
Nå må du laste tekstur atlas inn i prosjektet
Innen MyScene.h legge til..:
property NSMutableArray * explosionTextures;På slutten av if (selv = [super initWithSize: size]) betinget, legge inn følgende kode:
//last eksplosjoner SKTextureAtlas * explosionAtlas = [SKTextureAtlas atlasNamed :@"EKSPLOSJON"]; NSArray * textureNames = [explosionAtlas textureNames]; _explosionTextures = [NSMutableArray ny]; for (NSString * navn i textureNames) {SKTexture * tekstur = [explosionAtlas textureNamed: navn]; [_explosionTextures addObject: tekstur]; }
3. Legge Eksplosjoner
Når du har eksplosjonene lastet, er et nytt skritt for å se dem i aksjon. Du vil nå opprette en eksplosjon som oppstår når en kule treffer en fiende. På slutten av den hvis betinget if ((firstBody.categoryBitMask & bulletCategory) = 0!), Legge til følgende tekstutdraget:
//legge eksplosjon SKSpriteNode * eksplosjon = [SKSpriteNode spriteNodeWithTexture: [_ explosionTextures objectAtIndex: 0]]; explosion.zPosition = 1; explosion.scale = 0,6; explosion.position = contact.bodyA.node.position; [selvtillit addChild: eksplosjon]; SKAction * explosionAction = [SKAction animateWithTextures: _explosionTextures timePerFrame: 0,07]; SKAction * fjerne = [SKAction removeFromParent]; [eksplosjon runAction: [SKAction sekvens: @ [explosionAction, fjern]]];Bygg og kjøre prosjektet å teste kollisjon og eksplosjons animasjon. Du skal se noe sånt neste figur.
Illustrasjon av Explosion (Xcode)
4. Legge Clouds
Vi har nesten fullført spillet! Dette er bare den siste touch. Nå må du lage skyer atlas, og deretter laste tekstur atlas til minnet.
Før vi skrive koden for dette trinnet, må du huske å legge den .atlas utvidelse til "Clouds" -mappen i vedlagte laste ned og dra den inn i prosjektet
Innenfor MyScene.h filen legge til følgende:.
property NSMutableArray * cloudsTextures;Innenfor MyScene.m filen, under "last eksplosjoner" kode, legge til følgende:
//last skyer SKTextureAtlas * cloudsAtlas = [SKTextureAtlas atlasNamed: @ "Clouds"]; NSArray * textureNamesClouds = [cloudsAtlas textureNames]; _cloudsTextures = [NSMutableArray ny]; for (NSString * navn i textureNamesClouds) {SKTexture * tekstur = [cloudsAtlas textureNamed: navn]; [_cloudsTextures addObject: tekstur]; }Det siste trinnet er å tilfeldig generere skyer og presentere dem på skjermen med noen bevegelse. Du må legge til følgende tekstutdrag på slutten av EnemiesAndClouds metode:
//tilfeldige Clouds int randomClouds = [selvtillit getRandomNumberBetween: 0 til: 1]; if (randomClouds == 1) {int whichCloud = [selvtillit getRandomNumberBetween: 0 til: 3]; SKSpriteNode * sky = [SKSpriteNode spriteNodeWithTexture: [_ cloudsTextures objectAtIndex: whichCloud]]; int randomYAxix = [selvtillit getRandomNumberBetween: 0 til: screenRect.size.height]; cloud.position = CGPointMake (screenRect.size.height + cloud.size.height /2, randomYAxix); cloud.zPosition = 1; int randomTimeCloud = [selv getRandomNumberBetween: 9 til: 19]; SKAction * move = [SKAction moveTo: CGPointMake (0-cloud.size.height, randomYAxix) varighet: randomTimeCloud]; SKAction * fjerne = [SKAction removeFromParent]; [cloud runAction: [SKAction sekvens: @ [farten, fjern]]]; [selvtillit addChild: cloud]; }Bygg og kjøre prosjektet enda en gang. Hvis alt går bra, skal du se noe sånt neste figur.
Illustrasjon av Final Game (Xcode)
Konklusjon
Dette avslutter den tredje og endelig tutorial som viser hvordan du oppretter en fly spill med den nye Sprite Kit rammeverket tilgjengelig med iOS 7 SDK. Hvis du har fulgt denne serien fra start til slutt, skal du nå ha nok kunnskap til å lage en enkel Sprite Kit spillet ved hjelp av denne dynamiske nye spillmotor. Hvis du har spørsmål eller kommentarer, er du velkommen til å forlate dem nedenfor
Takk &!; Anbefalinger
Vi vil gjerne takke Daniel Ferenčak for å gi oss med spillet kunsten brukes til å produsere denne opplæringen serien.
For å få fullt utbytte av opplæringen serien, anbefaler vi at du tester vår kode ved å distribuere den til en reell enhet som kjører iOS 7. Du trenger Xcode 5 og de nyeste iOS 7 SDK. Hvis du ikke allerede har disse verktøyene, kan du laste dem ned fra Apple Developer Center. Når lastet ned, installere programvare, og du vil være klar til å begynne.
Previous:KeyNext Page:Lag en Location
Legg alle sprites i en enkelt mappe. For vårt prosjekt, kan du finne alle bildene i den vedlagte nedlasting innenfor "EKSPLOSJON" -mappen.