Ricerca…


Osservazioni

SKScene rappresenta una singola scena in un'applicazione SpriteKit. Un SKScene è 'presentato' in un SKView . SKSpriteNodes vengono aggiunti alla scena per implementare gli sprite effettivi.

Le applicazioni semplici possono avere un singolo SKScene che contiene tutti i contenuti di SpriteKit. App più complesse possono avere diverse SKScenes presentate in momenti diversi (es. Una scena di apertura per presentare le opzioni di gioco, una seconda scena per implementare il gioco stesso e una terza scena per presentare i risultati di "Game Over").

Sottoclassi di SKScene per implementare la funzionalità SpriteKit primaria

La funzionalità SpriteKit può essere implementata in una sottoclasse di SKScene. Ad esempio, un gioco può implementare le funzionalità di gioco principali all'interno di una sottoclasse di SKScene chiamata GameScene.

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

La funzionalità secondaria potrebbe quindi essere implementata in sottoclassi dei SKSpriteNode utilizzati all'interno della scena (vedere Sottoclasse di SKSpriteNode ).

Crea un SKScene che riempie SKView

Un semplice caso d'uso per creare un SKScene che riempie esattamente l'SKView. Ciò evita la necessità di considerare il ridimensionamento della vista per adattarsi o impostare una telecamera per mostrare una parte della scena.

Il codice seguente presuppone che sia già presente SKView chiamato skView (ad esempio, come definito in Creazione di SKView a schermo intero utilizzando Interface Builder ) e che è stata definita una sottoclasse di SKScene denominata GameView:

In Swift :

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

skView.presentScene(scene)

Tuttavia, se SKView può modificare le dimensioni (ad esempio se l'utente ruota il proprio dispositivo e questo fa sì che la vista venga allungata a causa dei suoi vincoli), SKScene non si adatta più a SKView. È possibile gestirlo ridimensionando SKScene ogni volta che SKView cambia dimensione (ad esempio nel metodo didChangeSize).

Crea un SKScene che scala per adattarsi allo SKView

Un SKScene ha un parametro scaleMode che definisce come cambierà la sua dimensione per adattarsi all'interno dello SKView che viene presentato in SKView se non ha le stesse dimensioni e / o forma.

Ci sono quattro opzioni per scaleMode:

  • AspectFit : la scena viene ridimensionata (ma non allungata) finché non si adatta alla vista. Ciò garantisce che la scena non sia distorta ma potrebbero esserci alcune aree della vista che non sono coperte dalla scena se la scena non ha la stessa forma della vista.
  • AspectFill : la scena viene ridimensionata (ma non allungata) per riempire completamente la vista. Ciò garantisce che la scena non sia distorta e che la vista sia completamente riempita ma alcune parti della scena potrebbero essere ritagliate se la scena non ha la stessa forma della vista.
  • Riempi : la scena viene ridimensionata (e se necessario allungata) per riempire completamente la vista. Questo assicura che la vista sia completamente riempita e che nessuna delle tue scene venga ritagliata, ma la scena verrà distorta se la scena non ha la stessa forma della vista.
  • ResizeFill : la scena non viene ridimensionata, ma piuttosto la sua dimensione viene modificata per adattarsi alla dimensione della vista.

Il codice seguente presuppone che sia già presente SKView chiamato skView (ad esempio, come definito in Creazione di SKView a schermo intero utilizzando Interface Builder ) e una sottoclasse di SKScene denominata GameView è stata definita e quindi utilizza la modalità di scala AspectFill :

In Swift 3 :

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

    skView.presentScene(scene)

Crea un SKScene con un SKCameraNode (iOS 9 e versioni successive)

È possibile inserire un SKCameraNode in un SKScene per definire quale parte della scena viene mostrata in SKView. Pensa a SKScene come a un mondo 2D con una telecamera che fluttua sopra di esso: l'SKView mostrerà ciò che la videocamera "vede".

Ad esempio, la fotocamera potrebbe essere collegata allo sprite del personaggio principale per seguire l'azione di un gioco a scorrimento.

L'SKCameraNode ha quattro parametri che definiscono quale parte della scena viene mostrata:

  • posizione : questa è la posizione della telecamera nella scena. La scena viene renderizzata per posizionare questa posizione nel mezzo di SKView.
  • xScale e yScale: definiscono come la scena è ingrandita nella vista. Mantenere questi due valori uguali per evitare di distorcere la vista. Un valore pari a 1 significa nessuno zoom, i valori inferiori a uno aumenteranno (ingrandiranno gli sprite) e i valori superiori a 1 verranno rimpiccioliti (rendere gli sprite più piccoli).
  • zRotazione : definisce come la vista viene ruotata nella vista. Un valore pari a zero non sarà una rotazione. Il valore è in radianti, quindi un valore di Pi (3.14 ...) ruoterà la vista capovolta.

Il codice seguente presuppone che sia già presente SKView chiamato skView (ad esempio, come definito in Creazione di SKView a schermo intero utilizzando Interface Builder ) e che è stata definita una sottoclasse di SKScene chiamata GameView. Questo esempio imposta semplicemente la posizione iniziale della videocamera, dovresti spostare la videocamera (come faresti con altri SKSpriteNodes nella scena) per far scorrere la visualizzazione:

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow