Suche…


Bemerkungen

SKScene repräsentiert eine einzelne Szene in einer SpriteKit-Anwendung. Eine SKScene wird in ein SKView 'dargestellt'. SKSpriteNodes werden der Szene hinzugefügt, um die tatsächlichen Sprites zu implementieren.

Einfache Anwendungen verfügen möglicherweise über eine einzige SKScene, die den gesamten Inhalt von SpriteKit enthält. Komplexere Apps können mehrere SKScenes enthalten, die zu unterschiedlichen Zeitpunkten präsentiert werden (z. B. eine Eröffnungsszene, um die Spieloptionen zu präsentieren, eine zweite Szene, um das Spiel selbst zu implementieren, und eine dritte Szene, um die Ergebnisse des 'Game Over' zu präsentieren).

Unterklassen von SKScene zur Implementierung der primären SpriteKit-Funktionalität

Die SpriteKit-Funktionalität kann in einer Unterklasse von SKScene implementiert werden. Zum Beispiel kann ein Spiel die Hauptspielfunktionalität in einer SKScene-Unterklasse namens GameScene implementieren.

In 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 */
    }
}

Sekundäre Funktionen könnten dann in Unterklassen der SKSpriteNodes implementiert werden, die in der Szene verwendet werden (siehe Unterklassen von SKSpriteNode ).

Erstellen Sie eine SKScene, die das SKView füllt

Ein einfacher Anwendungsfall, um eine SKScene zu erstellen, die das SKView genau ausfüllt. Dies vermeidet die Notwendigkeit, die Ansicht zu skalieren oder eine Kamera so einzustellen, dass ein Teil der Szene angezeigt wird.

Bei dem folgenden Code wird davon ausgegangen, dass bereits ein SKView namens skView vorhanden ist (z. B. wie unter Erstellen eines Vollbild-SKView mit Interface Builder definiert ) und eine Unterklasse von SKScene namens GameView definiert wurde:

In Swift :

let sceneSize = CGSizeMake(skView.frame.width, skView.frame.height)
let scene = SKScene(size: sceneSize)

skView.presentScene(scene)

Wenn das SKView jedoch die Größe ändern kann (z. B. wenn der Benutzer sein Gerät dreht und die Ansicht aufgrund seiner Einschränkungen gedehnt wird), passt die SKScene nicht mehr zum SKView. Sie können dies erreichen, indem Sie die Größe der SKScene bei jeder Änderung der SKView-Größe ändern (z. B. in der Methode didChangeSize).

Erstellen Sie eine SKScene, die an das SKView angepasst werden kann

Ein SKScene verfügt über einen scaleMode- Parameter, der definiert, wie er seine Größe ändert, damit er in das SKView passt, das in dem SKView dargestellt wird, wenn es nicht die gleiche Größe und / oder Form hat.

Es gibt vier Optionen für scaleMode:

  • AspectFit : Die Szene wird skaliert (aber nicht gestreckt), bis sie in die Ansicht passt. Auf diese Weise wird sichergestellt, dass die Szene nicht verzerrt wird. Es können jedoch einige Bereiche der Ansicht vorhanden sein, die nicht von der Szene abgedeckt werden, wenn die Szene nicht dieselbe Form wie die Ansicht hat.
  • AspectFill : Die Szene wird skaliert (aber nicht gestreckt), um die Ansicht vollständig auszufüllen. Dadurch wird sichergestellt, dass die Szene nicht verzerrt wird und die Ansicht vollständig gefüllt ist. Einige Teile der Szene werden jedoch möglicherweise beschnitten, wenn die Szene nicht mit der Ansicht identisch ist.
  • Füllen : Die Szene wird skaliert (und ggf. gestreckt), um die Ansicht vollständig auszufüllen. Dadurch wird sichergestellt, dass die Ansicht vollständig ausgefüllt ist und keine Ihrer Szenen abgeschnitten wird. Die Szene wird jedoch verzerrt, wenn die Szene nicht die gleiche Form hat wie die Ansicht.
  • ResizeFill : Die Szene wird überhaupt nicht skaliert, sondern ihre Größe wird an die Größe der Ansicht angepasst .

Bei dem folgenden Code wird davon ausgegangen, dass bereits ein SKView namens skView vorhanden ist (z. B. wie unter Erstellen eines Vollbild-SKView mit Interface Builder definiert ), und eine Unterklasse von SKScene namens GameView wurde definiert und verwendet dann den AspectFill scaleMode:

In Swift 3 :

    let sceneSize = CGSize(width:1000, height:1000)
    let scene = GameScene(size: sceneSize)
    scene.scaleMode = .aspectFill

    skView.presentScene(scene)

Erstellen einer SKScene mit einem SKCameraNode (iOS 9 und höher)

Sie können einen SKCameraNode in eine SKScene einfügen, um zu definieren, welcher Teil der Szene im SKView angezeigt wird. Stellen Sie sich die SKScene als eine 2D-Welt vor, über der eine Kamera schwebt: Das SKView zeigt, was die Kamera "sieht".

Beispielsweise könnte die Kamera an das Sprite der Hauptfigur angehängt werden, um die Aktion eines Scroll-Spiels zu verfolgen.

Der SKCameraNode verfügt über vier Parameter, die festlegen, welcher Teil der Szene angezeigt wird:

  • Position : Dies ist die Position der Kamera in der Szene. Die Szene wird gerendert, um diese Position in der Mitte des SKView zu platzieren.
  • xScale und yScale : Diese definieren, wie die Szene in der Ansicht gezoomt wird. Behalten Sie diese beiden Werte bei, um die Ansicht nicht zu verzerren. Ein Wert von 1 bedeutet kein Zoomen, Werte kleiner als eins zoomen ein (die Sprites werden größer erscheinen) und Werte über 1 werden verkleinert (die Sprites werden kleiner).
  • zRotation : Definiert, wie die Ansicht in der Ansicht gedreht wird. Ein Wert von Null ist keine Drehung. Der Wert ist im Bogenmaß, daher wird ein Wert von Pi (3,14 ...) die Ansicht auf den Kopf stellen.

Im folgenden Code wird davon ausgegangen, dass bereits ein SKView namens skView vorhanden ist (z. B. wie unter Erstellen eines Vollbild-SKView mit Interface Builder definiert ) und eine Unterklasse von SKScene namens GameView definiert wurde. In diesem Beispiel wird nur die Ausgangsposition der Kamera festgelegt. Sie müssen die Kamera verschieben (auf dieselbe Weise wie andere SKSpriteNodes in der Szene), um Ihre Ansicht zu scrollen:

In 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)


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow