sprite-kit
SKScene
Szukaj…
Uwagi
SKScene reprezentuje pojedynczą scenę w aplikacji SpriteKit. SKScene jest „prezentowane” w SKView . SKSpriteNodes są dodawane do sceny w celu zaimplementowania rzeczywistych duszków.
Proste aplikacje mogą mieć pojedynczy SKScene, który zawiera całą zawartość SpriteKit. Bardziej złożone aplikacje mogą mieć kilka scen SKScene, które są prezentowane w różnych momentach (np. Scena otwierająca prezentująca opcje gry, druga scena implementująca samą grę i trzecia scena prezentująca wyniki „Game Over”).
Podklasowanie SKScene w celu wdrożenia podstawowej funkcjonalności SpriteKit
Funkcję SpriteKit można zaimplementować w podklasie SKScene. Na przykład gra może implementować główną funkcjonalność gry w podklasie SKScene o nazwie GameScene.
W Swift :
import SpriteKit
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
/* Code here to setup the scene when it is first shown. E.g. add sprites. */
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
for touch in touches {
let location = touch.locationInNode(self)
/* Code here to respond to a user touch in the scene at location */
}
}
override func update(currentTime: CFTimeInterval) {
/* Code here to perform operations before each frame is updated */
}
}
Wtórna funkcjonalność może być następnie zaimplementowana w podklasach SKSpriteNode, które są używane w scenie (patrz Podklasa SKSpriteNode ).
Utwórz SKScene, który wypełnia SKView
Prosty przypadek użycia to stworzenie SKScene, który dokładnie wypełnia SKView. Pozwala to uniknąć konieczności skalowania widoku w celu dopasowania lub ustawienia kamery w celu pokazania części sceny.
Poniższy kod zakłada, że SKView o nazwie skView już istnieje (np. Jak zdefiniowano w Utwórz pełny ekran SKView za pomocą Konstruktora interfejsów ) i zdefiniowano podklasę SKScene o nazwie GameView:
W Swift :
let sceneSize = CGSizeMake(skView.frame.width, skView.frame.height)
let scene = SKScene(size: sceneSize)
skView.presentScene(scene)
Jeśli jednak SKView może zmienić rozmiar (np. Jeśli użytkownik obraca urządzenie, co powoduje rozciągnięcie widoku z powodu jego ograniczeń), SKScene nie będzie już pasował do SKView. Można temu zaradzić, zmieniając rozmiar SKScene za każdym razem, gdy SKView zmienia rozmiar (np. W metodzie didChangeSize).
Utwórz SKScene, który skaluje się w celu dopasowania do SKView
SKScene ma parametr scaleMode , który określa, w jaki sposób zmieni swój rozmiar, aby zmieścił się w SKView, który jest prezentowany w SKView, jeśli nie jest tego samego rozmiaru i / lub kształtu.
Istnieją cztery opcje dla scaleMode:
- AspectFit : scena jest skalowana (ale nie rozciągana), dopóki nie znajdzie się w widoku. Zapewnia to, że scena nie jest zniekształcona, ale mogą istnieć pewne obszary widoku, które nie są objęte sceną, jeśli scena nie ma tego samego kształtu co widok.
- AspectFill : scena jest skalowana (ale nie rozciągana), aby całkowicie wypełnić widok. Zapewnia to, że scena nie jest zniekształcona, a widok jest całkowicie wypełniony, ale niektóre części sceny mogą zostać przycięte, jeśli scena nie ma tego samego kształtu co widok.
- Wypełnij : scena jest skalowana (i w razie potrzeby rozciągana), aby całkowicie wypełnić widok. To gwarantuje, że widok jest całkowicie wypełniony i że żadna scena nie jest przycięta, ale scena zostanie zniekształcona, jeśli scena nie będzie miała tego samego kształtu co widok.
- ResizeFill : scena w ogóle nie jest skalowana, ale jej rozmiar jest zmieniany w celu dopasowania do rozmiaru widoku.
Poniższy kod zakłada, że SKView o nazwie skView już istnieje (np. Jak zdefiniowano w Stwórz pełny ekran SKView za pomocą Konstruktora interfejsów ) i zdefiniowano podklasę SKScene o nazwie GameView, a następnie korzysta z trybu skali AspectFill :
W Swift 3 :
let sceneSize = CGSize(width:1000, height:1000)
let scene = GameScene(size: sceneSize)
scene.scaleMode = .aspectFill
skView.presentScene(scene)
Utwórz SKScene za pomocą SKCameraNode (iOS 9 i nowszy)
Możesz umieścić SKCameraNode w SKScene, aby określić, która część sceny ma być wyświetlana w SKView. Pomyśl o SKScene jako o świecie 2D z unoszącą się nad nim kamerą: SKView pokaże to, co „widzi” kamera.
Np. Kamerę można przymocować do duszka głównego bohatera, aby śledzić akcję przewijania.
SKCameraNode ma cztery parametry, które określają, która część sceny jest pokazywana:
- pozycja : jest to pozycja kamery w scenie. Scena jest renderowana w celu umieszczenia tej pozycji na środku SKView.
- xScale i yScale : określają sposób powiększenia sceny w widoku. Utrzymaj te dwie wartości bez zmian, aby uniknąć zniekształcenia widoku. Wartość 1 oznacza brak powiększenia, wartości mniejsze niż jeden powiększają (sprawiają, że duszki wydają się większe), a wartości powyżej 1 zmniejszają (sprawiają, że duszki wydają się mniejsze).
- zRotation : określa sposób obracania widoku w widoku. Wartość zero nie będzie obrotu. Wartość jest w radianach, więc wartość Pi (3,14 ...) obróci widok do góry nogami.
Poniższy kod zakłada, że SKView o nazwie skView już istnieje (np. Jak zdefiniowano w Tworzenie pełnoekranowego SKView za pomocą Konstruktora interfejsów ) i zdefiniowano podklasę SKScene o nazwie GameView. W tym przykładzie po prostu ustawiono początkową pozycję kamery, należy przesunąć kamerę (w taki sam sposób, jak inne SKSpriteNodes w scenie), aby przewinąć widok:
W Swift 3 :
let sceneSize = CGSize(width:1000, height:1000)
let scene = GameScene(size: sceneSize)
scene.scaleMode = .aspectFill
let camera = SKCameraNode()
camera.position = CGPointM(x:500, y:500)
camera.xScale = 1
camera.yScale = 1
camera.zRotation = 3.14
scene.addChild(camera)
scene.camera = camera
skView.presentScene(scene)