Lag Space Invaders med Swift og Sprite Kit: presenterer Sprite Kit

Create Space Invaders med Swift og Sprite Kit: presenterer Sprite Kit
91
Del
4
Del

Dette Cyber ​​mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av
Dette innlegget er en del av en serie som heter Lag Space Invaders med Swift og Sprite Kit.Create Space Invaders med Swift og Sprite Kit. Implementering ClassesWhat du skal lage

I denne serien, jeg vil være lærer deg hvordan du oppretter en Space Invaders inspirert spill bruker Sprite Kit og Swift programmeringsspråk. Underveis vil du lære om Sprite Kit integrerte fysikkmotor, generere partikler ved hjelp av Sprite Kit innebygde partikkel editor, bruke akselerometer til å flytte spilleren, og mye mer. La oss komme i gang.

presenterer Sprite Kit

Sprite Kit er Apples 2D spillmotor som ble introdusert sammen med iOS 7. Med introduksjonen av Swift programmeringsspråk i 2014, har det aldri vært et bedre tidspunkt å være en spillutvikler for iOS.

Sprite Kit gir en gjengivelsesmotor bygget på toppen av OpenGL. Med bruk av strukturerte sprites, en innebygd fysikkmotor, og svært kraftig SKAction klasse, kan du raskt bygge funksjonelle 2D-spill.

Rende Loop

Sprite Kit, som de fleste spill motorer, benytter en gjengivelse løkke til å gjengi og oppdatere skjerm.S rende løkke har flere trinn det går gjennom før gjengi den aktuelle scenen. De er som følger:


    Oppdater

    Vurdere tiltak

    Simuler fysikk

    Bruk begrensninger

    Render scenen

    Hver av disse har en tilsvarende metode du kan bruke til å bruke noen ekstra logikk som må finne sted på den tiden innenfor rammen. Nærmere bestemt, ville du bruke følgende metoder innenfor scene.


      update

      didEvaluateActions

      didSimulatePhysics

      didApplyConstraints

      didFinishUpdate

      Vi er interessert i to av disse metodene for denne opplæringen, oppdatere og didSimulatePhysics. Vi vil bruke oppdateringen metoden for å flytte inntrengerne manuelt og didSimulatePhysics metode for å oppdatere spilleren, som vil bli kontrollert ved hjelp av akselerometeret og fysikkmotoren.

      SKNode

      En av byggesteinene i Sprite Kit rammeverket er SKNode klasse. Den SKNode klassen trenger ikke å trekke noen visuelle eiendeler. Dens primære rolle er å gi baseline atferd som andre klasser implementere. Den SKScene klassen er rotnoden i et tre av SKNode tilfeller, og brukes til å holde sprites og annet innhold som må bearbeides.

      rendering og animasjon er gjort av en SKView forekomst som er plassert inne i et vindu og andre visninger blir deretter lagt til den. Den SKScene eksempel legges til SKView eksempel. Du kan bruke en enkelt SKView eksempel i vinduet og bytte mellom forskjellige scener når som helst.

      Rammeverket definerer en rekke SKNode underklasser. Den vanligste årsaken for å bygge en scene er SKSpriteNode klasse. Den SKSpriteNode klasse kan trekkes enten som et rektangel med en SKTexture kartlagt på den eller som en farget, untextured rektangel. Du vil som oftest bruke teksturerte sprites, fordi dette er hvordan du vil ta med kunstverk til liv i spillet. Sjekk ut arv treet til SKNode klassen for å se hva andre typer noder er tilgjengelige.

      SKAction

      SKAction klassen er det som bringer dine SKNode klasser til livet. Ved å bruke SKAction klassen du kan flytte, rotere, skalere, og visne nodene. Du kan også bruke SKAction å spille av en lyd og kjøre egendefinert kode. Den SKAction klassen er veldig kraftig, og sammen med den SKNode klassen, er en av byggesteinene i en Sprite Kit spillet.

      Physics Engine

      Sprite Kit har en integrert fysikkmotor som gjør håndtering komplekse fysikk situasjoner en lek. Hvis du noen gang har forsøkt å implementere en fysikkmotor på egen hånd, vil du sette pris på denne funksjonen.

      I Sprite Kit, koordinater (0,0) ligger nederst til venstre på skjermen i stedet for øverst til venstre, som du kanskje er vant til, hvis du har jobbet med Flash, Corona, HTML5 Canvas, og mange andre spill rammer. Dette er fordi Sprite Kit bruker OpenGL under panseret.

      Jeg foreslår at du leser Apples Sprite Kit Programming Guide for å få mer kjent med de ovennevnte konsepter. Med denne korte introduksjonen ut av veien, la oss komme i gang å bygge et spill med Sprite Kit.

      1. Prosjektet Setup

      Åpne opp Xcode og velg Opprett en ny Xcode prosjekt eller velg Nytt > Prosjekt ... fra Fil-menyen.

      Pass på at du er målrettet mot iOS, at typen er Application, og at du har valgt spill som mal type. Klikk på Neste for å fortsette.

      Deretter velger hva du ønsker for Name Produktet, Organization Name, og Organisasjon Identifier. Kontroller at språket er satt til Swift, er Spillteknologi satt til SpriteKit og enheter er satt til iPad. Angi en plassering for å lagre prosjektfiler og klikk på Opprett.

      Hvis du klikker på Kjør-knappen øverst til venstre (eller trykk Kommando-R), vil Xcode bygge og drive din søknad, viser teksten "Hello, Verden!". Når du trykker på skjermen, er et bilde av et romskip lagt til og begynner å rotere.

      2. Prosjektet Configuration

      Velg prosjektet i prosjektet Navigator og åpne general fanen øverst. Under Deployment Info, fjern alle avmerkingsboksene men Portrait for Device Orientering.

      Deretter velger og slette GameScene.sks. Den .sks fil kan du legge ut scenen visuelt. For dette prosjektet, vil vi legge til hver node programmatisk. Åpne GameViewController.swift, slette innholdet, og erstatte den med følgende
      importere UIKitimport SpriteKitclass GameViewController. UIViewController {overstyring func viewDidLoad () {super.viewDidLoad () la scene = StartGameScene (størrelse: view.bounds.size) la skView = view as! SKView skView.showsFPS = true skView.showsNodeCount = true skView.ignoresSiblingOrder = true scene.scaleMode = .ResizeFill skView.presentScene (scene)} overstyring func prefersStatusBarHidden () - > Bool {return true}}

      GameViewController klassen arver fra UIViewController og vil ha en SKView som sin visning. Inne i viewDidLoad metoden, tvinger vi nedslått sitt syn eiendom til en SKView eksempel, bruker så! skriver cast operatør, og konfigurere visningen.

      Du har kanskje lagt merke til teksten i nedre høyre hjørne av skjermen når du kjørte programmet for første gang. Det er hva de showsFPS og showsNodeCount egenskaper er for, viser bilder per sekund spillet kjører på og antall SKNodes synlige i scenen.

      Hvis noen av nodene skulle flytte off-skjerm, node telle ville slippe, men de vil fortsatt være i minnet. Dette er viktig å huske og ikke la noden teller lure deg. Hvis du legger til 100 noder til en scene, og 90 av dem er off-screen, du har fortsatt 100 noder tar opp minne.

      For optimalisering formål er ignoresSiblingOrder satt til true. Du kan lese mer om dette i Sprite Kit Programming Guide. Det siste vi gjør er påberope SKView sin presentScene metode og passere i StartGameScene, som vi vil skape i neste trinn.

      Til slutt, ønsker vi ikke statuslinjen for å bli vist så vi return true fra preferStatusBarHidden metoden.

      3. Opprette StartGameScene

      Trinn 1: Legge til StartGameScene Class

      Velg Ny > Fil ... fra Fil-menyen og velg Cocoa Touch Class fra iOS > Kilde delen. Klikk på Neste for å fortsette.

      Deretter nevne klassen StartGameScene og sørg for at den arver fra SKScene. Språk bør settes til Swift. Klikk på Neste for å fortsette.

      Fortell Xcode hvor du vil lagre filen for den nye klassen, og klikk på Opprett. Legg til følgende kode i StartGameScene.swift
      importere UIKitimport SpriteKitclass StartGameScene. SKScene {overstyring func didMoveToView (vis: SKView) {bakgrunnsfarge = SKColor.blackColor () NSLog ("Vi har lastet startskjermen")}}

      Den didMoveToView (_ :) metoden kalles umiddelbart etter at scenen er presentert av utsikten. Vanligvis er dette hvor du vil gjøre oppsettet for scene og lage dine eiendeler.

      Hvis du teste spillet nå skal du bli presentert med en svart skjerm som viser bildefrekvens og node teller i nedre høyre hjørne av skjermen

      Trinn 2:. Legge startGameButton

      Det er ikke morsomt å se på en svart skjerm så la oss lage vår første SKSpriteNode eksempel. Oppdatere didMoveToView (_ :) metode som vist nedenfor
      styre func didMoveToView (vis. SKView) {la startGameButton = SKSpriteNode (imageNamed: "newgamebtn") startGameButton.position = CGPointMake (size.width /2, size.height /2 - 100) startGameButton.name = "startgame" addChild (startGameButton)}

      Vi erklærer en konstant startGameButton hjelp av praktiske initializer init (imageNamed :), som tar som argument navnet på bildet. Vi sentrere den på skjermen både horisontalt og vertikalt, bortsett fra at vi trekker 100 poeng for å plassere det litt off-center på den vertikale aksen. Vi setter sitt navn egenskapen til startgame slik at vi kan se tilbake til det senere. Til slutt, vi legger det til scenen ved å påberope addChild (_ :), som tar som argument noden å legge til scenen. Du kan lære mer om SKSpriteNode klassen i SpriteKit Work Reference.

      Nå ville være et godt tidspunkt å legge bildene til prosjektet. Last ned kildefilene for denne opplæringen, og finn mappen som heter bilder. Dra den inn på mappen som har navnet på hva du heter prosjektet, for eksempel MobileTutsInvaderz. Kontroller at Kopier elementer hvis det er nødvendig er sjekket så vel som hovedmålet i listen over mål.

      Hvis du tester søknaden din, skal du se en knapp merket "Nytt spill".

      Trinn 3: Implementering touchesBegan

      Deretter må vi gjennomføre touchesBegan (_: withEvent :) metode. Gjennomføringen er vist nedenfor. Den touchesBegan metode kalles når en eller flere fingre berører ned på skjermen
      styre func touchesBegan. (Berører: Set < NSObject >, withEvent hendelse: UIEvent) {la berørings = touches.first som! UITouch la touchLocation = touch.locationInNode (egen-) la touchedNode = self.nodeAtPoint (touchLocation) if (touchedNode.name == "startgame") {la gameOverScene = GameScene (størrelse: størrelse) gameOverScene.scaleMode = scaleMode la transitionType = SKTransition. ? flipHorizontalWithDuration (1,0) view .presentScene (gameOverScene, overgang: transitionType)}}

      multiTouchEnabled eiendom scenen syn er satt til false som standard, noe som betyr at visningen bare mottar den første berøring av en multitouch-sekvens. Med denne egenskapen deaktivert, kan du hente den preg ved å bruke den første beregnede eiendom av det lille satt siden det er bare ett objekt i settet. Legg merke til at vi også nedslått den til en UITouch.

      Vi lagrer plasseringen av touch i scene i en konstant heter touchLocation. Vi gjør dette ved å påberope locationInNode (_ :) på berørings objekt, passerer i scenen. Vi kan da finne ut hvilken node ble rørt av å påberope nodeAtPoint, passerer i berørings plassering. Med denne noden touchedNode funnet, kan vi sjekke navnet eiendom, og hvis det er lik startgame, vi vet at de tappet på knappen.

      Hvis brukeren tappet på knappen instantiate vi GameScene klassen og sette scaleMode å være den samme som den aktuelle scene målestokk modus. Vi deretter opprette en SKTransition heter transitionType og vise scenen ved å påberope presentScene (_:. Overgang :) passerer i gameOverScene og transitionType

      Det er ganske mange SKTransistion typer å velge mellom. Du kan lese mer om dem i SpriteKit Work Reference. Jeg foreslår at du prøver ut noen og se hvilke du liker best.

      Hvis du tester søknaden din, kan du trykke på knappen som tar deg til GameScene. Dette er den samme scene prosjektet opprinnelig startet med.

      Konklusjon

      Dette bringer den første delen av denne serien til en avslutning. Du har blitt introdusert til Sprite Kit og har lært hvordan de skal lage egne scener, bruke SKSpriteNode klasse, og oppdage innslag. Dette er bare begynnelsen, vi har fortsatt mye å lære. Takk for lesing, og jeg vil se deg i neste del av denne serien.