Zoeken…


Opmerkingen

SKScene vertegenwoordigt een enkele scène in een SpriteKit-toepassing. Een SKScene wordt 'gepresenteerd' in een SKView . SKSpriteNodes worden aan de scène toegevoegd om de werkelijke sprites te implementeren.

Eenvoudige toepassingen kunnen een enkele SKScene hebben die alle inhoud van SpriteKit bevat. Complexere apps kunnen meerdere SKScenes hebben die op verschillende tijdstippen worden gepresenteerd (bijvoorbeeld een openingsscène om de spelopties te presenteren, een tweede scène om de game zelf te implementeren en een derde scène om de 'Game Over'-resultaten te presenteren).

Subklasse van SKScene om de primaire SpriteKit-functionaliteit te implementeren

SpriteKit-functionaliteit kan worden geïmplementeerd in een subklasse van SKScene. Een game kan bijvoorbeeld de belangrijkste gamefunctionaliteit implementeren in een SKScene-subklasse 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 */
    }
}

Secundaire functionaliteit zou vervolgens kunnen worden geïmplementeerd in subklassen van de SKSpriteNodes die binnen de scène worden gebruikt (zie SubpriteNode subklasse ).

Maak een SKScene die de SKView vult

Een eenvoudig gebruik om een SKScene te maken die de SKView exact vult. Hierdoor hoeft niet te worden overwogen om het beeld te schalen of een camera in te stellen om een deel van de scène weer te geven.

De volgende code gaat ervan uit dat er al een SKView met de naam skView bestaat (bijvoorbeeld zoals gedefinieerd in SKView op volledig scherm maken met Interface Builder ) en dat er een subklasse van SKScene met de naam GameView is gedefinieerd:

In Swift :

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

skView.presentScene(scene)

Als de SKView echter van grootte kan veranderen (bijv. Als de gebruiker zijn apparaat roteert en dit veroorzaakt dat de weergave wordt uitgerekt vanwege de beperkingen), past de SKScene niet langer in de SKView. Je kunt dit beheren door het formaat van de SKScene te wijzigen telkens wanneer de SKView van grootte verandert (bijvoorbeeld in de methode didChangeSize).

Maak een SKScene die past op de SKView

Een SKScene een scaleMode parameter die bepaalt hoe de grootte fit veranderen binnen de SKView het wordt aangeboden in de SKView indien deze niet dezelfde afmeting en / of vorm.

Er zijn vier opties voor scaleMode:

  • AspectFit : de scène wordt geschaald (maar niet uitgerekt) totdat deze in het beeld past. Dit zorgt ervoor dat de scène niet wordt vervormd, maar dat sommige delen van de weergave niet door de scène worden bedekt als de scène niet dezelfde vorm heeft als de weergave.
  • AspectFill : de scène wordt geschaald (maar niet uitgerekt) om het beeld volledig te vullen. Dit zorgt ervoor dat de scène niet wordt vervormd en dat het beeld volledig wordt gevuld, maar dat sommige delen van de scène kunnen worden bijgesneden als de scène niet dezelfde vorm heeft als het beeld.
  • Invullen : de scène wordt geschaald (en indien nodig uitgerekt) om het beeld volledig te vullen. Dit zorgt ervoor dat de weergave volledig is gevuld en dat niets van uw scène is bijgesneden, maar de scène wordt vervormd als de scène niet dezelfde vorm heeft als de weergave.
  • ResizeFill : de scène wordt helemaal niet geschaald, maar de grootte ervan wordt aangepast aan de grootte van de weergave.

De volgende code gaat ervan uit dat er al een SKView met de naam skView bestaat (bijvoorbeeld zoals gedefinieerd in SKView op volledig scherm maken met Interface Builder ) en een subklasse van SKScene met de naam GameView is gedefinieerd en gebruikt vervolgens de AspectFill scaleMode :

In Swift 3 :

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

    skView.presentScene(scene)

Maak een SKScene met een SKCameraNode (iOS 9 en hoger)

U kunt een SKCameraNode in een SKScene plaatsen om te bepalen welk deel van de scène wordt weergegeven in de SKView. Zie de SKScene als een 2D-wereld met een camera erboven: de SKView laat zien wat de camera 'ziet'.

De camera kan bijvoorbeeld worden bevestigd aan de sprite van de hoofdpersoon om de actie van een schuifspel te volgen.

De SKCameraNode heeft vier parameters die bepalen welk deel van de scène wordt getoond:

  • positie : dit is de positie van de camera in de scène. De scène wordt weergegeven om deze positie in het midden van de SKView te plaatsen.
  • xScale en yScale : deze bepalen hoe de scène wordt ingezoomd in de weergave. Houd deze twee waarden hetzelfde om te voorkomen dat het beeld wordt vervormd. Een waarde van 1 betekent geen zoom, waarden kleiner dan één zullen inzoomen (waardoor de sprites groter lijken) en waarden boven 1 zullen uitzoomen (waardoor de sprites kleiner lijken).
  • z Rotatie : hiermee wordt bepaald hoe de weergave in de weergave wordt geroteerd. Een waarde van nul is geen rotatie. De waarde is in radialen, dus een waarde van Pi (3.14 ...) roteert het beeld ondersteboven.

De volgende code gaat ervan uit dat er al een SKView met de naam skView bestaat (bijvoorbeeld zoals gedefinieerd in SKView op volledig scherm maken met Interface Builder ) en dat er een subklasse van SKScene met de naam GameView is gedefinieerd. In dit voorbeeld wordt alleen de beginpositie van de camera ingesteld. U moet de camera verplaatsen (op dezelfde manier als andere SKSpriteNodes in de scène) om door uw weergave te bladeren:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow