SKAction

プロパティ

アクションが完了するまでの時間(秒)

duration

NSTimeInterval
説明 アクションが完了するまでの時間。ただし実際の時間は、アクションのspeedとノードのspeedとの計算結果で決まる。

どのくらい早くアクションを実行するかを修正する速度係数

speed

CGFloat
説明 この係数はどのくらいの早さでアクションのアニメーションを実行するかを調節します。例えば、係数が2.0の場合はアニメーションを2倍の速度で実行することを意味します。

アクションを計算するために使われるタイミングモード

(アクションの実行速度の変化、例えば最初ゆっくり、終わり早くなど。)

timimgMode

SKActionTimingMode
説明 このプロパティに有効な値は、「Action Timing Modes」を参照。初期値はSKActionTimingLinear。

Action Timing Modes定数

SKActionTimingLinear アクションを一定の速度で実行する。
SKActionTimingEaseIn アクションを最初遅く、徐々に速くしていく。
SKActionTimingEaseOut アクションを最初速く、徐々に遅くしていく。
SKActionTimingEaseInEaseOut アクションを最初遅く、徐々に速くし、終わりにまた遅くする。

 

 

メソッド

ノードを移動させるアクション

ノードの現在位置から相対的に移動するアクションを作成

+(SKAction*)moveByX:(CGFloat)deltaX y:(CGFloat)deltaY duration:(NSTimeInterval)sec

deltaX ノードの座標に加えるX方向の値(ポイント)
deltaY ノードの座標に加えるY方向の値(ポイント)
sec アニメーションに要する時間(秒)
// 例:下記のアクションは、例えば現在位置が(10,10)だとすると(15,20)へ2秒かけて移動する。
SKAction *action1 = [SKAction moveByX:5.0 y:10.0 sec:2.0]; 

ノードの現在位置から相対的に移動するアクションを作成

+(SKAction*)moveBY:(CGVector)delta duration:(NSTimeInterval)sec

delta ノードの座標に加えるベクトル値
sec アニメーションに要する時間(秒)
// 例:下記のアクションは、例えば現在位置が(10,10)だとすると(15,20)へ2秒かけて移動する。
​SKAction *action1 = [SKAction moveBY:CGVectorMake(5.0, 10.0) sec:2.0]; 

ノードを新しい位置へ移動するアクションを作成

+ (SKAction *)moveTo:(CGPoint)location duration:(NSTimeInterval)sec

location ノードの新しい座標位置
sec アニメーションに要する時間(秒)
// 下記のアクションは、ノードが現在位置から(20,30)へ5秒かけて移動する。
​SKAction *action1 = [SKAction moveTo:CGPointMake(20.0, 30.0) sec:5.0];

ノードを水平移動するアクションを作成

+ (SKAction *)moveToX:(CGFloat)x duration:(NSTimeInterval)sec

x ノードの新しいX座標
sec アニメーションに要する時間(秒)
// 下記のアクションは、ノードが現在位置からX=20まで水平に5秒かけて移動する。
​SKAction *action1 = [SKAction moveToX:20.0 sec:5.0];

ノードを垂直移動するアクションを作成

+ (SKAction *)moveToY:(CGFloat)y duration:(NSTimeInterval)sec

y ノードの新しいY座標
sec アニメーションに要する時間(秒)
// 下記のアクションは、ノードが現在位置からY=30まで垂直に5秒かけて移動する。
​SKAction *action1 = [SKAction moveToY:30.0 sec:5.0];

パスに沿ってノードが移動しながら回転するアクションを作成

+ (SKAction *)followPath:(CGPathRef)path duration:(NSTimeInterval)sec

path Core Graphicパス、パスの座標は相対位置。(ノードは現在位置から動き出す)
sec アニメーションに要する時間(秒)

このメソッドは、followPath:asOffset:orientToPath:duration:メソッドでoffsetとorientにYESを指定した時と同じ動作をします。

// まずパスを作成する。ここでは(0,0)-(50,150)の直線を作成する。
CGMutablePathRef path1 = CGPathCreateMutable();
CGPathMoveToPoint(path1, NULL, 0, 0); // 第2引数はアフィン変換を使用する時に指定
CGPathAddLineToPoint(path1, NULL, 50, 150);
// パスに沿って移動するアクションを作成
SKAction *action1 = [SKAction followPath:path1 duration:5.0];

パスに沿ってノードが移動するアクションを作成

+ (SKAction *)followPath:(CGPathRef)path asOffset:(BOOL)offset orientToPath:(BOOL)orient duration:(NSTimeInterval)sec

path パス
offset YESでパスは相対座標(ノードは現在位置から動き出す)、 NOでパスは絶対座標(ノードはパスの始点と同じ座標から動き出す)
orient YESでパスに沿って回転する
sec アニメーションに要する時間(秒)
// パスに沿って移動するアクションを作成。下記はパスの位置が絶対値、パスの方向に回転させる場合。
SKAction *action1 = [SKAction followPath:path1 asOffset:NO orientToPath: YES duration:5.0]; 

ノードを回転させるアクション

相対値でノードを回転させるアクションを作成

+ (SKAction *)rotateByAngle:(CGFloat)radians duration:(NSTimeInterval)sec

radians 角度の変化量(ラジアン)
sec アニメーションに要する時間(秒)
// 最終角度は、現在の角度+45度になる
​SKAction *action1 =  [SKAction rotateByAngle:45.0 / 180.0 * M_PI duration:5.0];

指定した角度になるようにノードを反時計回りに回転させるアクションを作成

+ (SKAction *)rotateToAngle:(CGFloat)radians duration:(NSTimeInterval)sec

radians 角度の新しい値(ラジアン)
sec アニメーションに要する時間(秒)
// 反時計回りに回転、最終角度は45度
​SKAction *action1 =  [SKAction rotateToAngle:45.0 / 180.0 * M_PI duration:5.0];

指定した角度になるようにノードを回転する

+ (SKAction *)rotateToAngle:(CGFloat)radians duration:(NSTimeInterval)sec shortestUnitArc:(BOOL)shortestUnitArc

radians 角度の新しい値(ラジアン)
sec アニメーションに要する時間(秒)
shortestUnitArc YESで最短方向へ回転する
// 現在角度が0度の場合、時計回りに90度回転
SKAction *action1 =  [SKAction rotateToAngle:270.0 / 180.0 * M_PI duration:2.0 shortestUnitArc:YES]; 

ノードのアニメーション速度を変化させるアクション

相対値でアクションの実行速度を変化させるアクション

+ (SKAction *)speedBy:(CGFloat)speed duration:(NSTimeInterval)sec

speed speedの変化量
sec アニメーションに要する時間(秒)
// 5秒かけてspeedの値を現在値から(現在値+3.0)へ変化させる
​SKAction *action1 =  [SKAction speedBy:3.0 duration:5.0];

アクションの実行速度を変化させるアクション

+ (SKAction *)speedTo:(CGFloat)speed duration:(NSTimeInterval)sec

speed speedの新しい値
sec アニメーションに要する時間(秒)
// 5秒かけてspeedの値を現在値から2.0へ変化させる
SKAction *action1 =  [SKAction speedTo:2.0 duration:5.0];

ノードを拡大縮小するアクション

相対値でノードの拡大縮小をするアクション

+ (SKAction *)scaleBy:(CGFloat)scale duration:(NSTimeInterval)sec

scale ノードのxscaleとyscaleに加算する値
sec アニメーションに要する時間(秒)
SKAction *action1 = [SKAction scaleBy:2.0 duration:2.0];

ノードを拡大縮小するアクション

+ (SKAction *)scaleTo:(CGFloat)scale duration:(NSTimeInterval)sec

scale ノードのxscaleとyscaleの新しい値
sec アニメーションに要する時間(秒)
SKAction *action1 = [SKAction scaleTo:3.0 duration:2.0];

相対値でノードの拡大縮小をするアクション

+ (SKAction *)scaleXBy:(CGFloat)xScale y:(CGFloat)yScale duration:(NSTimeInterval)sec

xScale ノードのxscaleに加算する値
yScale ノードのyscaleに加算する値
sec アニメーションに要する時間(秒)
SKAction *action1 = [SKAction scaleXBy:1.5 y:2.0 duration:3.0];

ノードを横方向に拡大縮小するアクション

+ (SKAction *)scaleXTo:(CGFloat)scale duration:(NSTimeInterval)sec

scale ノードのxscaleの新しい値
sec アニメーションに要する時間(秒)
SKAction *action1 = [SKAction scaleXTo:2.0 duration:3.0];

ノードを拡大縮小するアクション

+ (SKAction *)scaleXTo:(CGFloat)xScale y:(CGFloat)yScale duration:(NSTimeInterval)sec

xScale ノードのxscaleの新しい値
yScale ノードのyscaleの新しい値
sec アニメーションに要する時間(秒)
SKAction *action1 = [SKAction scaleXTo:2.0 y:1.5 duration:3.0];

ノードを縦方向に拡大縮小するアクション

+ (SKAction *)scaleYTo:(CGFloat)scale duration:(NSTimeInterval)sec

scale ノードのyscaleの新しい値
sec アニメーションに要する時間(秒)
SKAction *action1 = [SKAction scaleYTo:2.0 duration:3.0];

ノードの透明度を変化させるアクション

ノードのアルファ値を1.0(不透明)に変化させるアクションを作成

+ (SKAction *)fadeInWithDuration:(NSTimeInterval)sec

sec アニメーションに要する時間(秒)
// 最初にノードのalphaを0.0などにセットしておく必要がある。
SKAction *action1 = [SKAction fadeInWithDuration:2.0];

ノードのアルファ値を0.0(透明)に変化させるアクションを作成

+ (SKAction *)fadeOutWithDuration:(NSTimeInterval)sec

sec アニメーションに要する時間(秒)
SKAction *action1 = [SKAction fadeOutWithDuration:2.0];

相対値でノードのアルファ値を変化させるアクションを作成

+ (SKAction *)fadeAlphaBy:(CGFloat)factor duration:(NSTimeInterval)sec

factor アルファ値の変化量
sec アニメーションに要する時間(秒)
SKAction *action1 = [SKAction fadeAlphaBy:0.5 duration:2.0];

新しい値にノードのアルファ値を変化させるアクションを作成

+ (SKAction *)fadeAlphaTo:(CGFloat)alpha duration:(NSTimeInterval)sec

alpha ノードの新しいアルファ値
sec アニメーションに要する時間(秒)
SKAction *action1 = [SKAction fadeAlphaTo:0.5 duration:2.0]

スプライトノードの内容を変化させるアクション

スプライトのサイズを調節するアクションを作成

+ (SKAction *)resizeByWidth:(CGFloat)width height:(CGFloat)height duration:(NSTimeInterval)duration

width スプライトの幅に加算する値
height スプライトの高さに加算する値
duratiuon アニメーションに要する時間(秒)

スプライトノードにのみ適用。

SKAction *action1 = [SKAction resizeByWidth:50.0 height:30.0 duration:5.0];

スプライトの高さを変更するアクションを作成

+ (SKAction *)resizeToHeight:(CGFloat)height duration:(NSTimeInterval)duration

height スプライトの新しい高さの値
duratiuon アニメーションに要する時間(秒)

スプライトノードにのみ適用。
reverse不可。

SKAction *action1 = [SKAction resizeToHeight:100.0 duration:5.0];

スプライトの幅を変更するアクションを作成

+ (SKAction *)resizeToWidth:(CGFloat)width duration:(NSTimeInterval)duration

width スプライトの新しい幅の値
duratiuon アニメーションに要する時間(秒)

スプライトノードにのみ適用。
reverse不可。

SKAction *action1 = [SKAction resizeToWidth:100.0 duration:5.0];

スプライトの幅と高さを変更するアクションを作成

+ (SKAction *)resizeToWidth:(CGFloat)width height:(CGFloat)height duration:(NSTimeInterval)duration

width スプライトの新しい幅の値
height スプライトの新しい高さの値
duratiuon アニメーションに要する時間(秒)

スプライトノードにのみ適用。
reverse不可。

SKAction *action1 = [SKAction resizeToWidth:100.0 height:100.0 duration:5.0];

スプライトのテクスチャを変更するアクションを作成

+ (SKAction *)setTexture:(SKTexture *)texture

texture 新しいテクスチャ

スプライトノードにのみ適用。
reverse不可。

SKAction *action1 = [SKAction setTexture:texture1];

スプライトのテクスチャを変更し、リサイズするアクションを作成

+ (SKAction *)setTexture:(SKTexture *)texture resize:(BOOL)resize

texture 新しいテクスチャ
resize YESで新しいテクスチャにマッチするようにリサイズされる。
NOでスプライトのサイズは変わらない。 

スプライトノードにのみ適用。
reverse不可。

SKAction *action1 = [SKAction setTexture:texture1 resize:YES];

スプライトのテクスチャを変更してアニメーションするアクションを作成

+ (SKAction *)animateWithTextures:(NSArray *)textures timePerFrame:(NSTimeInterval)sec

textures アニメーションに使用するテクスチャを格納した配列
sec テクスチャが表示される1枚あたりの時間(秒)
(アクションの実行には、テクスチャの枚数×secの時間がかかる。)

 スプライトノードにのみ適用。

SKAction *action1 = [SKAction animateWithTextures:textures1 timePerFrame:0.1];

スプライトのテクスチャを変更して、可能ならリサイズしてアニメーションするアクションを作成

+ (SKAction *)animateWithTextures:(NSArray *)textures timePerFrame:(NSTimeInterval)sec resize:(BOOL)resize restore:(BOOL)restore

textures アニメーションに使用するテクスチャを格納した配列
sec テクスチャが表示される1枚あたりの時間(秒)
(アクションの実行には、テクスチャの枚数×secの時間がかかる。)
resize YESでテクスチャに合わせてリサイズされる。
restore YESでアクション完了時、前回のアクション終了時のテクスチャに戻る。
NOでアクション完了時、配列の最後のテクスチャのまま終わる。 

スプライトノードにのみ適用。

備考:restoreパラメータがYESの時、アクション終了前にノードから削除されるとテクスチャは元に戻る。これは通常のアクション削除時の振る舞いとは異なる。

SKAction *action1 = [SKAction animateWithTextures:textures1 timePerFrame:0.1 resize:YES restore:YES];

スプライトの色とブレンド係数を変更するアニメーションを作成

+ (SKAction *)colorizeWithColor:(SKColor *)color colorBlendFactor:(CGFloat)colorBlendFactor duration:(NSTimeInterval)sec

color スプライトの新しい色
colorBlendFactor スプライトの新しいブレンド係数
sec アニメーションに要する時間(秒)

スプライトノードにのみ適用。
reverse不可。

SKAction *action1 = [SKAction colorizeWithColor[SKColor redColor] colorBlendFactor:1.0 duration:2.0];

スプライトのブレンド係数を変更するアニメーションを作成

+ (SKAction *)colorizeWithColorBlendFactor:(CGFloat)colorBlendFactor duration:(NSTimeInterval)sec

colorBlendFactor スプライトの新しいブレンド係数
sec アニメーションに要する時間(秒)

スプライトノードにのみ適用。
reverse不可。

SKAction *action1 = [SKAction colorBlendFactor:0.5 duration:2.0];

サウンドの再生

サウンドを再生するアクションを作成

+ (SKAction *)playSoundFileNamed:(NSString *)soundFile waitForCompletion:(BOOL)wait

soundFile サウンドファイル名
wait YESでアクションの実行時間は演奏時間と同じとなり、演奏終了まで待つことになる。
NOでアクションはすぐ完了したとみなす。

reverse不可。

SKAction *action1 = [SKAction playSoundFileNamed:@"filename1.caf" waitForCompletion:YES];

シーンからノードを削除

親からノード(自分自身)を削除するアクションを作成

+ (SKAction *)removeFromParent

reverse不可。

SKAction *action1 = [SKAction removeFromParent];

子ノードのアクションを実行する

名前のついた子オブジェクトにアクションを実行させるアクションを作成

+ (SKAction *)runAction:(SKAction *)action onChildWithName:(NSString *)name

action 実行するアクション
name 子オブジェクトの名前 
SKAction *action1 = [SKAction runAction:action2 onChildWithName:@"name1"];

複数のアクションを組み合わせたり、繰り返す

複数のアクションを平行して実行する

+ (SKAction *)group:(NSArray *)actions

actions SKActionオブジェクトを格納した配列 
// action2とaction3は同時に実行される
SKAction *action1 = [SKAction group:@[action2, action3]];

複数のアクションを連続して実行する

+ (SKAction *)sequence:(NSArray *)actions

actions SKActionオブジェクトを格納した配列 
// action2が実行された後、action3が実行される。
SKAction *action1 = [SKAction sequence:@[action2, action3]];

特定の回数アクションを繰り返す

+ (SKAction *)repeatAction:(SKAction *)action count:(NSUInteger)count

action 実行するアクション
count 繰り返す回数 
// action2が10回実行される
SKAction *action1 = [SKAction repeatAction:action2 count:10];

アクションを永久に繰り返す

+ (SKAction *)repeatActionForever:(SKAction *)action

action 実行するアクション

備考:繰り返すアクションは即座に終わるアクションではないこと。

SKAction *action1 = [SKAction repeatActionForever:action2];

連続したアクション中で、待ち時間を入れる

特定の時間待機するアクションを作成

+ (SKAction *)waitForDuration:(NSTimeInterval)sec

sec 待機する時間(秒) 
SKAction *action1 = [SKAction waitForDuration:10.0];

ランダムな時間待機するアクションを作成 

+ (SKAction *)waitForDuration:(NSTimeInterval)sec withRange:(NSTimeInterval)durationRange

sec 待機する平均の時間(秒)
durationRange 待機する時間の範囲(秒)

このアクションが実行される時、ある時間待機してアクションが終了する。これは、2つの異なるアクション間の遅延を挿入するための、連続するアクションのパーツとして一般には使われる。しかし、ある時間経過した後にコードを実行する必要がある時、runAction:completion:メソッドと共に使うこともできる。
このアクションが実行されるごとに待機時間は新しいランダムな値が計算される。待機時間は(secを中心として)プラスマイナス両方向にdurationRangeパラメーターの2分の1の値の範囲で毎回変化する。 

// 25から35秒(ランダムに決まる)の時間待機する
SKAction *action1 = [SKAction waitForDuration:30.0 withRange:5.0];

カスタムアクション

ブロック文を実行するアクションを作成

+ (SKAction *)runBlock:(dispatch_block_t)block

block 実行するブロック文

reverse不可

SKAction *action1 = [SKAction runBlock:^{
// ここに命令文を記述
}] 

特定のディスパッチのキューでブロック文を実行するアクションを作成

+ (SKAction *)runBlock:(dispatch_block_t)block queue:(dispatch_queue_t)queue

block 実行するブロック文
queue アクションが実行されるためのキュー 

指定した時間の間ブロック文を実行し続けるアクションを作成

+ (SKAction *)customActionWithDuration:(NSTimeInterval)seconds actionBlock:(void (^)(SKNode *node, CGFloat elapsedTime))block

seconds アクションを実行する時間(秒)
block 実行するブロック文
node:アクションが実行されているノード
elapsedTime:経過時間 
 
SKAction *action1 = [SKAction customActionWithDuration:5.0 actionBlock:^(SKNode *node, CGFloat elapsedTime){
// ここに命令文を記述
}]; 

オブジェクトのメソッドを呼び出すアクションを作成

+ (SKAction *)performSelector:(SEL)selector onTarget:(id)target

selector 呼び出すメソッドのセレクタ
target ターゲットのオブジェクト

reverse不可

SKAction *action1 = [SKAction performSelector:@selector(method1) onTarget:self];

逆方向のアクション

逆方向のアクションを作成

- (SKAction *)reversedAction

すべてのアクションを逆方向にできるとは限りません。場合によっては、何もしない時や同じアクションをすることがあります。

SKAction *action1 = [action2 reversedAction];