수색…


비고

SKScene은 SpriteKit 응용 프로그램의 단일 장면을 나타냅니다. SKScene는에 '선물'입니다 SKView . 실제 스프라이트를 구현하기 위해 SKSpriteNodes 가 장면에 추가됩니다.

간단한 응용 프로그램에는 모든 SpriteKit 내용을 포함하는 단일 SKScene이있을 수 있습니다. 더 복잡한 애플 리케이션은 다른 시간에 제공되는 여러 개의 SKScene을 가질 수 있습니다 (예 : 게임 옵션을 표시하는 시작 장면, 게임 자체를 구현하는 두 번째 장면 및 'Game Over'결과를 제공하는 세 번째 장면).

주요 SpriteKit 기능 구현을위한 SKScene의 서브 클래 싱

SpriteKit 기능은 SKScene의 하위 클래스에서 구현할 수 있습니다. 예를 들어, 게임은 GameScene이라는 SKScene 하위 클래스 내에서 주요 게임 기능을 구현할 수 있습니다.

스위프트 :

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

그런 다음 보조 기능을 장면 내에서 사용되는 SKSpriteNodes의 하위 클래스에서 구현할 수 있습니다 ( SKSpriteNode 서브 클래 싱 참조).

SKView를 채우는 SKScene 만들기

SKView를 정확히 채우는 SKScene을 만드는 간단한 사용 사례. 따라서 장면의 일부를 표시하도록 카메라를 맞추거나 설정하기 위해 뷰의 크기를 조정할 필요가 없습니다.

다음 코드에서는 skView라는 SKView가 이미 존재한다고 가정합니다 (예 : 인터페이스 작성기를 사용하여 전체 화면 SKView 만들기 에 정의 된대로). SKView라는 GameView라는 하위 클래스가 정의되었습니다.

스위프트 :

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

skView.presentScene(scene)

그러나 SKView가 크기를 변경할 수있는 경우 (예 : 사용자가 장치를 회전하여 제약 조건으로 인해보기가 늘어나는 경우) SKScene은 더 이상 SKView에 적합하지 않습니다. SKView가 크기를 변경할 때마다 (예 : didChangeSize 메서드에서) SKScene의 크기를 조정하여이 값을 관리 할 수 ​​있습니다.

SKView에 맞게 조정되는 SKScene 만들기

SKScene에는 SKView 내에 크기에 맞게 크기가 변경되는 방식을 정의하는 scaleMode 매개 변수가 있습니다.이 크기는 동일한 크기 및 / 또는 모양이 아닌 경우 SKView에 표시됩니다.

scaleMode에는 네 가지 옵션이 있습니다.

  • AspectFit : 장면이보기에 맞을 때까지 장면의 크기가 조절됩니다 (그러나 늘이지 는 않음). 이렇게하면 장면이 왜곡되지 않지만 장면이보기와 동일한 모양이 아닌 경우 장면에서 다루지 않는 일부 영역이 나타날 수 있습니다.
  • AspectFill : 장면을 완전히 채우기 위해 장면의 크기가 조절됩니다 (그러나 늘이지 는 않음). 이렇게하면 장면이 왜곡되지 않고보기가 완전히 채워지지만 장면이보기와 동일한 모양이 아닌 경우 장면의 일부가 잘릴 수 있습니다.
  • 채우기 : 장면을 완전히 채우기 위해 장면의 크기가 조절됩니다 (필요한 경우 늘려 짐). 이렇게하면보기가 완전히 채워지고 장면이 잘리지 않지만 장면이보기와 동일한 모양이 아닌 경우 장면이 왜곡됩니다.
  • ResizeFill : 장면의 크기가 전혀 조정되지 않고 크기가보기의 크기에 맞게 변경됩니다.

다음 코드에서는 skView라는 SKView가 이미 존재한다고 가정합니다 (예 : Interface Builder를 사용하여 전체 화면 SKView 만들기에 정의 된대로). GameView라는 SKScene의 하위 클래스가 정의 된 다음 AspectFill scaleMode를 사용합니다.

스위프트 3 :

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

    skView.presentScene(scene)

SKCameraNode를 사용하여 SKScene 만들기 (iOS 9 이상)

SKCameraNode를 SKScene에 배치하여 SKView에 표시되는 장면의 부분을 정의 할 수 있습니다. SKScene을 2D 세계로 생각해보십시오. SKView는 카메라가 볼 수있는 것을 보여줍니다.

예를 들어, 스크롤링 게임의 동작을 따르기 위해 카메라를 주인공의 스프라이트에 부착 할 수 있습니다.

SKCameraNode에는 장면의 어떤 부분이 표시되는지 정의하는 네 개의 매개 변수가 있습니다.

  • position : 이것은 장면에서 카메라의 위치입니다. 장면이 렌더링되어이 위치가 SKView의 중간에 배치됩니다.
  • xScaleyScale : 뷰에서 장면이 확대되는 방식을 정의합니다. 보기를 왜곡시키지 않으려면이 두 값을 동일하게 유지하십시오. 값 1은 줌이 없다는 것을 의미하고, 1보다 작은 값은 확대 (스프라이트가 커 보이게)하고 1보다 큰 값은 축소 (스프라이트가 더 작게 보이도록)합니다.
  • zRotation : 뷰에서 뷰를 회전하는 방법을 정의합니다. 값 0은 회전이 없습니다. 값은 라디안 단위이므로 Pi (3.14 ...) 값은 뷰를 거꾸로 회전시킵니다.

다음 코드에서는 skView라는 SKView가 이미 존재한다고 가정합니다 (예 : Interface Builder를 사용하여 전체 화면 SKView 만들기 에 정의 된대로). GameView라는 SKScene의 하위 클래스가 정의되었습니다. 이 예제는 카메라의 초기 위치를 설정하기 만하면 장면을 스크롤하기 위해 다른 SKSpriteNodes와 마찬가지로 카메라를 이동해야합니다.

스위프트 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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow