SpriteKit jest biblioteką do tworzenia grafiki i animacji 2D dla
Transkrypt
SpriteKit jest biblioteką do tworzenia grafiki i animacji 2D dla
SpriteKit jest biblioteką do tworzenia grafiki i animacji 2D dla frameworka Cocoa. W oknie programu umieszczany jest obiekt klasy SKView, w nim prezentowana jest scena. Projekt może zawierać wiele scen, odtwarzanych kolejno na żądanie. Jest wbudowany cykl życia i pętla przetwarzania, która pozwala na kolejne odtwarzanie poszczególnych klatek sceny. @IBOutlet weak var skView: SKView! applicationDidFinishLaunching(aNotification: NSNotification) { let scene = GameScene(size: self.window.frame.size) skView.presentScene(scene) } Scena jest obiektem klasy SKScene. Podstawowe metody tej klasy pozwalają: • didMoveToView - ustalić początkowy stan sceny oraz zmiennych globalnych w klasie, • update - aktualizować ich wartości podczas odtwarzania kolejnych klatek sceny. Scena jest zorganizowana w drzewo węzłów - obiektów klasy SKNode lub jej pochodnych. Scena jest korzeniem tego drzewa, umieszczane na niej obiekty to są Child. Węzły mogą także mieć swoich potomków, które będą dziedziczyć ich właściwości i metody. Główne typy węzłów (klasy pochodne po SKNode): SKSpriteNode - obraz wypełniony teksturą klasy SKTexture, SKLabelNode - pole tekstowe, SKShapeNode - figura geometryczna płaska (prostokąt, owal, inna zdefiniowana ścieżka) Do węzłów można zastosować obiekt klasy SKAction, aby uzyskać efekt animacji, modyfikować scenę lub realizować określone stany gry. Dla akcji typu: transformacja obiektu można podać czas jej trwania. Najczęściej używane metody klasy SKAction: moveTo(), moveByX(), moveByY() - przesunięcia rotateByAngle() - obrót scaleBy(), scaleTo() - zmiana rozmiarów animateWithTextures() - zmiany obrazu removeFromParent() - usunięcie obiektu ze sceny playSoundFileNamed() - odtwarzanie dźwięku (plik dźwiękowy musi być w zasobach projektu) Akcja może być sekwencją kilku akcji wykonywanych kolejno po sobie: let a = SKAction.sequence([akcja1, akcja2]) Akcję można wykonać określoną liczbę razy, lub powtarzać bez końca: let b = SKAction.repeatAction(akcja, count: 1) let c = SKAction.repeatActionForever(akcja, timePerFrame: 0.06) Przypisanie akcji do obiektu: obiekt.runAction(akcja) obiekt.runAction(akcja, withKey: "nazwa") - akcja z identyfikatorem, można później sprawdzać czy akcja o takiej nazwie jest aktualnie uruchomiona AppDelegate.swift - w metodzie applicationDidFinishLaunching dodaj kolor sceny scene.backgroundColor = NSColor.yellowColor() GameScene.swift ——————————————————————————————— import SpriteKit class GameScene: SKScene { // http://soundcli.ps/browse/tweet?page=0 // wybór innych dżwięków let glos = SKAction.playSoundFileNamed("tweet.mp3", waitForCompletion: false) override func didMoveToView(view: SKView) { let myLabel = SKLabelNode(fontNamed:"Chalkduster") myLabel.text = "Hello, World!"; myLabel.fontSize = 25; myLabel.fontColor = NSColor.redColor() myLabel.position = CGPoint(x: 0, y: -10); // myLabel.zPosition = CGFloat(2) let tlo = SKSpriteNode(color: NSColor.blueColor(), size: CGSizeMake(300,50)) tlo.position = CGPoint(x:self.frame.width/2, y: self.frame.height/2); tlo.addChild(myLabel) // self.addChild(myLabel) self.addChild(tlo) let ys = self.frame.height/2 let lewa = CGPoint(x:0, y: ys) let prawa = CGPoint(x:self.frame.width, y: ys) } let wlewo = SKAction.moveTo(lewa, duration: 2) let wprawo = SKAction.moveTo(prawa, duration: 2) let kiwaj = SKAction.sequence([wprawo,wlewo]) tlo.runAction(SKAction.repeatActionForever(kiwaj)) override func mouseDown(theEvent: NSEvent) { runAction(glos) let location = theEvent.locationInNode(self) let sprite = SKSpriteNode(imageNamed:"twitter-bird") sprite.position = location; //sprite.setScale(0.5) let anim = SKAction.scaleTo(0.05, duration: 5.0) let won = SKAction.removeFromParent() sprite.runAction(SKAction.sequence([anim,won])) let action = SKAction.rotateByAngle(CGFloat(M_PI), duration:1) sprite.runAction(SKAction.repeatActionForever(action)) } } self.addChild(sprite) override func update(currentTime: CFTimeInterval) { } Zasoby projektu: tweet.mp3, twitter-bird.png