SKScene

プロパティ

シーンの基点

anchorPoint

CGPoint初期値(0.0, 0.0)(左下)

背景色

backgroundColor

SKColor*
初期値 (RGBA 0.15, 0.15, 0.15, 1.0)(灰色)

コード例

// シーンのクラスで
self.backgroundColor = [SKColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0]; // 背景色を白に設定

物理世界(読み込みのみ)

physicsWorld

SKPhysicsWorld*

すべてのシーンは自動的にノードの物理シミュレートを行うためのphysics worldオブジェクトを作成します。
このプロパティは、例えば重力のような、ゲーム世界全体の物理条件を設定するために使います。
個々のノードの物理条件についてはphysicsBodyを参照してください。

ビュー上でどのようにシーンがマッピングされるか

scaleMode

SKSceneScaleMode
初期値 SKSceneScaleModeFill

サイズの異なるビュー上にシーンを表示することができます。
scaleModeの値でどのようにビューにマッピングされるかが決まります。

SKSceneScaleModeFill シーンの幅と高さがビューに合わせて拡大して表示される。
SKSceneScaleModeAspectFill アスペクト比(縦と横の比率)を保持したまま表示させる。ビューとの縦横比が違うと、シーンがはみ出して表示されない部分が生じる。
SKSceneScaleModeAspectFit アスペクト比を保持したままサイズをフィットさせる。シーンの全体が表示されるが、ビューとの縦横比が違うとビューに余白が生じる。
SKSceneScaleModeResizeFill シーンはビューにマッチするように拡大縮小されません。ビューの大きさに合わせてリサイズされます。

シーンのサイズ(ポイント)

size

CGSize

sizeに新しい値が設定されると、didChangeSize:メソッドが呼ばれます。
scaleModeプロパティにSKSceneScaleModeResizeFillが設定されており、ビューがリサイズされた時もこのプロパティが変更されます。
シーンのサイズが変更されるとすぐに、次の画面更新時に新しいサイズでレンダリングされます。

現在シーンを表示しているビュー(読み込みのみ)

view

SKView*

シーンを表示するには、SKViewクラスのpresentScene:メソッドかpresentScene:transiton:メソッドを呼び出します。
シーンが表示されていない時このプロパティにはnilが入ります。

シーンを作成する

サイズを指定してシーンを作成

+ (instancetype)sceneWithSize:(CGSize)size

size シーンのサイズ(ポイント)

コード例

// 初期プロジェクトのViewController.mファイルでMySceneクラスのシーンが作成されています。
SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];

サイズを指定してシーンを作成

- (instancetype)initWithSize:(CGSize)size

size シーンのサイズ(ポイント)

シーンのサイズ変更を検知する

シーンのサイズが変更された時に呼ばれるメソッド

- (void)didChangeSize:(CGSize)oldSize

oldSize 変更される前のシーンのサイズ

このメソッドはサブクラスでオーバーライドして使うことができます。
一般的にこのメソッドはシーンでノードの位置を調整するために使います。

座標系を変換する

ビュー座標からシーンの座標へ変換する

- (CGPoint)convertPointFromView:(CGPoint)point

point ビュー座標系における座標

このメソッドが呼ばれる前にシーンがビュー上で表示されている必要があります。

シーンの座標からビュー座標へ変換する

- (CGPoint)convertPointToView:(CGPoint)point

point シーン座標系における座標

このメソッドが呼ばれる前にシーンがビュー上で表示されている必要があります。

シーンの準備をする

ビューからシーンが取り除かれる直前に呼ばれるメソッド

- (void)willMoveFromView:(SKView *)view

view シーンが表示されているビュー

サブクラスでこのメソッドをオーバーライドすることができます。
このメソッドはビューから削除される時に独自の動作を記述するために使います。

ビューによってシーンが表示された時に呼ばれるメソッド

- (void)didMoveToView:(SKView *)view

view シーンを表示するビュー

サブクラスでこのメソッドをオーバーライドすることができます。
このメソッドはビューに表示される時に独自の動作を記述するために使います。
例えば、このメソッドをシーンの中身を作成するために利用することができます。

アニメーションループを実行する

シーン特有の更新処理を行う(アクションが評価される前に実行される)

- (void)update:(NSTimeInterval)currentTime

currentTime 現在のシステム時間

このメソッドを直接呼び出さないこと。
このメソッドは、シーンがビューで表示されており、シーンが停止していない限り、1フレームに1回正確に呼び出されます。
初期状態でこのメソッドは何もしません。
シーンのサブクラスでこのメソッドをオーバーライドし、必要な更新処理をおこなってください。

前回のupdateメソッドからの経過時間が欲しい場合のコード例

ここでlastUpdateTimeはクラスのプロパティとして定義しておく。
例:@property (nonatomic) CFTimeInterval lastUpdateTime;

// updateメソッドの最初に以下を記述
if (self.lastUpdateTime == 0.0) {self.lastUpdateTime = currentTime - 1.0 / 60.0;} // 最初だけ実行される。初回は1/60秒経過したものとみなす。
CFTimeInterval elapsedTime = currentTime - self.lastUpdateTime;
self.lastUpdateTime = currentTime;

アクションが評価された後に実行される

- (void)didEvaluateActions

このメソッドを直接呼び出さないこと。
このメソッドは、シーンがビューで表示されており、シーンが停止していない限り、1フレームに1回正確に呼び出されます。
初期状態でこのメソッドは何もしません。
シーンのサブクラスでこのメソッドをオーバーライドし、必要な更新処理をおこなってください。

物理シミュレートが行われた後に実行される

- (void)didSimulatePhysics

このメソッドを直接呼び出さないこと。
このメソッドは、シーンがビューで表示されており、シーンが停止していない限り、1フレームに1回正確に呼び出されます。
初期状態でこのメソッドは何もしません。
シーンのサブクラスでこのメソッドをオーバーライドし、必要な更新処理をおこなってください。