Buscar..


Observaciones

SKScene representa una sola escena en una aplicación SpriteKit. Un SKScene se 'presenta' en un SKView . SKSpriteNodes se agregan a la escena para implementar los sprites reales.

Las aplicaciones simples pueden tener un solo SKScene que contiene todo el contenido de SpriteKit. Las aplicaciones más complejas pueden tener varias escenas SKS que se presentan en diferentes momentos (p. Ej., Una escena inicial para presentar las opciones del juego, una segunda escena para implementar el juego en sí y una tercera escena para presentar los resultados de 'Game Over').

Subclasificando SKScene para implementar la funcionalidad principal de SpriteKit

La funcionalidad SpriteKit se puede implementar en una subclase de SKScene. Por ejemplo, un juego puede implementar la funcionalidad principal del juego dentro de una subclase de SKScene llamada GameScene.

En 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 funcionalidad secundaria podría luego implementarse en las subclases de los SKSpriteNodes que se usan dentro de la escena (ver Subclase de SKSpriteNode ).

Crear un SKScene que llena el SKView

Un simple caso de uso es crear un SKScene que llene exactamente el SKView. Esto evita la necesidad de considerar escalar la vista para ajustar o configurar una cámara para mostrar una parte de la escena.

El siguiente código asume que ya existe un SKView llamado skView (por ejemplo, como se define en Crear un SKView de pantalla completa utilizando Interface Builder ) y se ha definido una subclase de SKScene llamada GameView:

En Swift :

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

skView.presentScene(scene)

Sin embargo, si el SKView puede cambiar de tamaño (por ejemplo, si el usuario gira su dispositivo y esto hace que la vista se estire debido a sus limitaciones), el SKScene ya no se ajustará al SKView. Puede administrar esto cambiando el tamaño de SKScene cada vez que SKView cambie de tamaño (por ejemplo, en el método didChangeSize).

Cree un SKScene que se adapte al SKView

Un SKScene tiene un parámetro scaleMode que define cómo cambiará su tamaño para que se ajuste al SKView que se presenta en el SKView si no tiene el mismo tamaño y / o forma.

Hay cuatro opciones para scaleMode:

  • AspectFit : la escena se escala (pero no se estira) hasta que se ajusta a la vista. Esto garantiza que la escena no se distorsione, pero puede haber algunas áreas de la vista que no están cubiertas por la escena si la escena no tiene la misma forma que la vista.
  • AspectFill : la escena se escala (pero no se estira) para llenar la vista completamente. Esto garantiza que la escena no esté distorsionada y que la vista esté completamente llena, pero algunas partes de la escena pueden recortarse si la escena no tiene la misma forma que la vista.
  • Rellenar : la escena se escala (y, si es necesario, se estira) para completar la vista por completo. Esto asegura que la vista esté completamente llena y que ninguna parte de su escena esté recortada, pero la escena se distorsionará si la escena no tiene la misma forma que la vista.
  • ResizeFill : la escena no se escala en absoluto, sino que se cambia su tamaño para ajustarse al tamaño de la vista.

El siguiente código asume que ya existe un SKView llamado skView (por ejemplo, como se define en Crear un SKView de pantalla completa usando Interface Builder ) y se definió una subclase de SKScene llamada GameView y luego se usa el modo de escala AspectFill :

En Swift 3 :

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

    skView.presentScene(scene)

Cree un SKScene con un SKCameraNode (iOS 9 y posterior)

Puede colocar un SKCameraNode en un SKScene para definir qué parte de la escena se muestra en el SKView. Piense en el SKScene como un mundo en 2D con una cámara flotando sobre él: el SKView mostrará lo que "ve" la cámara.

Por ejemplo, la cámara podría estar conectada al sprite del personaje principal para seguir la acción de un juego de desplazamiento.

El SKCameraNode tiene cuatro parámetros que definen qué parte de la escena se muestra:

  • posición : esta es la posición de la cámara en la escena. La escena se renderiza para colocar esta posición en el centro de SKView.
  • xScale y yScale : definen cómo se amplía la escena en la vista. Mantenga estos dos valores iguales para evitar distorsionar la vista. Un valor de 1 significa que no hay zoom, los valores menores que uno se acercarán (hará que los sprites parezcan más grandes) y los valores superiores a 1 se alejarán (los sprites aparecerán más pequeños).
  • zRotación : esto define cómo se gira la vista en la vista. Un valor de cero será sin rotación. El valor está en radianes, por lo que un valor de Pi (3.14 ...) girará la vista al revés.

El siguiente código asume que ya existe un SKView llamado skView (por ejemplo, como se define en Crear un SKView de pantalla completa utilizando Interface Builder ) y se ha definido una subclase de SKScene llamada GameView. En este ejemplo, solo se establece la posición inicial de la cámara, debe mover la cámara (de la misma manera que lo haría con otros SKSpriteNodes en la escena) para desplazarse por su vista:

En 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow