sprite-kit
SKScene
サーチ…
備考
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の中央に配置されます。
- xScaleとyScale :ビュー内のシーンのズーム方法を定義します。この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)