サーチ…


備考

SKSceneは、SpriteKitアプリケーション内の単一のシーンを表します。 SKSceneはに「提示」されるSKView 。シーンにSKSpriteNodesが追加され、実際のスプライトが実装されます。

シンプルなアプリケーションには、すべてのSpriteKitコンテンツを含む単一のSKSceneがあるかもしれません。より複雑なアプリケーションは、異なる時間に提示されるいくつかのSKScene(例えば、ゲームオプションを提示するためのオープニングシーン、ゲーム自体を実装するための第2のシーン、および「ゲームオーバー」結果を提示するための第3のシーン)を有することができる。

主な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が既に存在することを前提としています(たとえば、 Interface Builderを使用してフルスクリーンSKViewを作成するに定義されているように)。SKViewのGameViewというサブクラスが定義されています。

スイフトで

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

skView.presentScene(scene)

しかし、SKViewがサイズを変更できる場合(ユーザーがデバイスを回転させ、その制約のためにビューが伸びるなど)、SKSceneはもはやSKViewに適合しなくなります。これは、SKViewがサイズを変更するたびにSKSceneのサイズを変更することによって(たとえばdidChangeSizeメソッドで)これを管理できます。

SKViewに合わせてスケールするSKSceneを作成する

SKSceneには、 SKView内に収まるようにサイズをどのように変更するかを定義するscaleModeパラメータがあります。このパラメータは、同じサイズおよび/またはシェイプでない場合にSKViewに表示されます。

scaleModeには4つのオプションがあります。

  • 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には、シーンのどの部分が表示されるかを定義する4つのパラメータがあります。

  • position :これはシーン内のカメラの位置です。シーンがレンダリングされ、この位置がSKViewの中央に配置されます。
  • xScaleyScale :ビュー内のシーンのズーム方法を定義します。この2つの値を同じにして、ビューを歪ませないようにしてください。値が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