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)


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow