アクション

アクションは主にスプライトに動きをつけるために使用します。

基本

SKAction *action1 = [SKAction moveTo:CGPointMake(100.0, 100.0) duration:1.0];
SKAction *action2 =  [SKAction rotateToAngle:270.0 / 180.0 * M_PI  duration:2.0];
SKAction *sequence1 = [ SKAction sequence:@[action1, action2]];
[sprite1 runAction:sequence1]; // sprite1はSKSpriteNodeのオブジェクト等。スプライトのページを参照。

ここではaction1とaction2を定義して、連続して実行する。

例文:移動

moveToは指定座標まで移動、moveByは現在の座標から数値分移動します。

指定座標まで移動

SKAction *action1 = [SKAction moveTo:CGPointMake(100, 100) duration:1.0]; // (100,100)まで1秒かけて移動

現在座標から指定座標分を移動

SKAction *action1 = [SKAction moveBy:CGVectorMake(10, 20) duration:1.0]; // 現在位置から(10,20)移動
SKAction *action1 = [SKAction moveByX:10.0 y:20.0 duration:1.0];     // 現在位置から(10,20)移動

X座標だけ、あるいはY座標だけ移動

SKAction *action1 = [SKAction moveToX:100.0 duration:1.0];     // X座標だけ100.0に移動
SKAction *action1 = [SKAction moveToY:150.0 duration:1.0];     // Y座標だけ150.0に移動

パスに沿って移動(ノードはパスに沿って回転する)

SKAction *action1 =  [SKAction followPath:path1 duration:1.0];

下記、パスの作成方法参照。

パスに沿って移動(開始位置やノードの回転を指定)

[SKAction followPath:path1 asOffset:YES orientToPath:YES duration:1];

asOffsetはYES で相対位置(現在の座標+パスの座標)、NOでパスの座標がそのまま使われる。
orientToPath YESでスプライトはパスの方向に沿って回転する、NOで回転せず。

パスの作成方法1

CGMutablePathRef path1 = CGPathCreateMutable();
CGPathMoveToPoint(path1, NULL, 0, 0);
CGPathAddLineToPoint(path1, NULL, 50, 50);

パスの作成方法2

UIBezierPath *bezierPath = [UIBezierPath bezierPath];
[bezierPath moveToPoint:CGPointMake(0,0)];
[bezierPath addLineToPoint:CGPointMake(50, 50)];
CGPathRef path1 = bezierPath.CGPath;

例文:回転

指定した角度になるように回転する

SKAction *action1 =  [SKAction rotateToAngle:45.0 / 180.0 * M_PI duration:0.1]; // 反時計回りに回転、最終角度は45度

指定した角度になるように回転する、最短方向に回転

SKAction *action1 =  [SKAction rotateToAngle:270.0 / 180.0 * M_PI duration:2.0 shortestUnitArc:YES];// この場合時計回りに90度
// shortestUnitArcがYESで最短方向に回転

現在の角度から、指定した角度だけ回転

SKAction *action1 =  [SKAction rotateByAngle:45.0 / 180.0 * M_PI duration:0.1]; // 最終角度は、現在の角度+45度になる

例文:アクションの実行速度

スピード変更

SKAction *action1 =  [SKAction speedTo:2.0 duration:1.0];

SKNodeのspeedプロパティの値を変更する
speedByの場合、現在の値から指定した値だけ変化する

例文:拡大縮小

拡大縮小

SKAction *action1 =  [SKAction scaleTo:2.0 duration:1.0];

scaleXToまたはscaleYTo の場合、X方向もしくはY方向だけ拡大縮小
scaleXTo:y: の場合、X方向とY方向を指定して、拡大縮小
caleBy scaleXBy:y: の場合、現在の値から指定した値だけ変化する

例文:透明度

透明度変更

SKAction *action1 =  [SKAction fadeAlphaTo:0.5 duration:1.0];

fadeAlphaBy: の場合、現在の値から指定した値だけ変化する

フェードイン(透明から不透明へ)

SKAction *action1 =  [SKAction fadeInWithDuration:1.0];

最初にスプライトのalphaが1.0(不透明)だと意味が無い。alphaを0.0にしておくと透明から不透明に変化する。

フェードアウト(不透明から透明へ)

SKAction *action1 =  [SKAction fadeOutWithDuration:1.0];

例文:サイズ、テクスチャ、アニメーション、カラー

サイズ変更

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

テクスチャを変更

SKAction *action1 =  [SKAction setTexture:texture1];

複数のテクスチャでアニメーション

[SKAction animateWithTextures:array1 timePerFrame:0.2f resize:NO restore:YES];

テクスチャのページを参照

カラー変更

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

colorBlendFactorはどのくらい色をつけるか。colorBlendFactorを0.5にすると半分だけ色がつく。

例文:サウンド

サウンドを鳴らす

SKAction* soundAction1  = [SKAction playSoundFileNamed:@"soundFileName.caf" waitForCompletion:YES];

waitForCompletionをYESにすると再生終了まで待機。NOにすると、次のアクションがあればすぐ実行される

例文:アクションの実行と終了

アクションを実行

[sprite1 runAction:action1];

全てのアクションを削除

[sprite1 removeAllActions];

シーンから自分自身を削除する

SKAction *action1 = [SKAction removeFromParent];

例文:子オブジェクトの名前を指定してアクションを実行

SKAction *action1 = [SKAction runAction:action2 onChildWithName:@"name1"];

例文:アクションをまとめる

連続したアクション

SKAction *sequence1 =[ SKAction sequence:@[action1, action2]];

グループ化したアクション(2つ以上のアクションが同時に実行される)

SKAction *action1 =[ SKAction group:@[action1, action2]];

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

SKAction *action1 = [SKAction repeatAction:action2 count:5];

アクションを永久に続ける

SKAction *action1 =  [SKAction repeatActionForever:action2];

例文:待機

一定時間待機

SKAction *action1 = [SKAction waitForDuration:1.0];
SKAction *action1 = [SKAction waitForDuration:3.0 withRange:1.0]; // 3秒プラスマイナス0.5秒 

例文:カスタムアクション

メソッドを実行

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

カスタムアクション

SKAction *action1 = [SKAction customActionWithDuration:0 actionBlock:^(SKNode *node, CGFloat elapsedTime){
// ここに命令文を記述
}];

customActionWithDurationの時間が経過するまで、繰り返しブロック文が実行される。
elapsedTimeに経過した時間が代入される。

ブロック文実行

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

例文:逆方向のアクション

SKAction *action1 =  [SKAction reversedAction:action2];

逆方向にならないアクションもあるので注意

例文:アクションの動作タイミング変更

初期設定はSKActionTimingLinearで、アクションが一定の速度で実行される。

action1.timingMode = SKActionTimingEaseInEaseOut;

SKActionTimingLinear アクションは一定の速度で実行される
SKActionTimingEaseIn ゆっくり始まり、スピードアップする
SKActionTimingEaseOut 最初速く始まり、スピードダウンする
SKActionTimingEaseInEaseOut 最初ゆっくり、中間で速度が速まり、最後ゆっくり終わる