Objective-C:Sprite Kit の SKAction サンプルコード一覧

Sprite Kit の SKAction を使えば、簡単にスプライトをアニメーションさせることが可能です。

今回は Apple 公式の SKAction クラスリファレンスを参考に SKAction のメソッドと、サンプルコードをリスト化しました。コピペで即使用可能ですので、ご活用下さい。

SKAction サンプルコード一覧

※ 各アクションの xxxBy は現在の値を基準に、xxxTo は元の値を基準にアニメーションを実行する。

サンプルコードで使用するスプライト(共通)

XXX.png ファイルでスプライトを生成する
SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"XXX.png"];

移動

座標 (x:160 y:320) へ移動
SKAction *moveTo = [SKAction moveTo:CGPointMake(160, 320) duration:1.0];
[sprite runAction:moveTo];

左(反時計回り)に180度回転

SKAction *rotateTo = [SKAction rotateByAngle:M_PI duration:1.0];
[sprite runAction:rotateTo];

アニメーションの実行速度

回転の実行速度を3秒かけて5倍に変化させる
// 3秒かけてspeedの値を現在値から 5.0 へ変化させる
SKAction *speedTo =  [SKAction speedTo:5.0 duration:3.0];
SKAction *rotateTo = [SKAction rotateByAngle:M_PI*4 duration:5.0];
SKAction *group = [SKAction group:@[rotateTo,speedTo]];
[sprite runAction:group];

// 3秒かけてspeedの値を現在値から 現在値+5.0 へ変化させる
SKAction *speedBy =  [SKAction speedBy:5.0 duration:3.0];
SKAction *rotateTo = [SKAction rotateByAngle:M_PI*4 duration:5.0];
SKAction *group = [SKAction group:@[rotateTo,speedBy]];
[sprite runAction:group];

拡大縮小

2倍に拡大する
// 現在の倍率を基準に、2倍に拡大
SKAction *scaleTo = [SKAction scaleTo:2.0 duration:1.0];
[sprite runAction:scaleTo];

// 元の倍率を基準に、 2倍に拡大
SKAction *scaleBy = [SKAction scaleBy:2.0 duration:1.0];
[sprite runAction:scaleBy];

フェードイン・フェードアウト

フェードアウトする
// フェードイン
SKAction *fadeIn = [SKAction fadeInWithDuration:1.0];
[sprite runAction:fadeIn];

// フェードアウト
SKAction *fadeOut = [SKAction fadeOutWithDuration:1.0];
[sprite runAction:fadeOut];

透明度

// 現在の値を基準に、透明度を0に
SKAction *fadeAlphaTo = [SKAction fadeAlphaTo:0.0 duration:1.0];
[sprite runAction:fadeAlphaTo];

// 元の値を基準に、透明度を1.0に
SKAction *fadeAlphaBy = [SKAction fadeAlphaBy:1.0 duration:1.0];
[sprite runAction:fadeAlphaBy];

リサイズ

元のサイズの width に 100, height に 50 を加算する
SKAction *resizeBy = [SKAction resizeByWidth:100.0 height:50.0 duration:1.0];
[sprite runAction:resizeBy];

テクスチャアニメーション

texture1.png の表示0.5秒後、texture2.png に切り替える
SKTexture *texture1 = [SKTexture textureWithImageNamed:@"texture1.png"];
SKTexture *texture2 = [SKTexture textureWithImageNamed:@"texture2.png"];
NSArray *textureArray = [NSArray arrayWithObjects:texture1,texture2, nil];
SKAction *textureAnimation = [SKAction animateWithTextures:textureArray timePerFrame:0.5];

カラー

青色に変更
SKAction *toBlue = [SKAction colorizeWithColor:[SKColor blueColor] colorBlendFactor:1 duration:1.0];
[sprite runAction:toBlue];

サウンド再生

サウンドファイル sound.aif を再生
SKActon *playSound = [SKAction playSoundFileNamed:@"sound.aif" waitForCompletion:NO]];
[sprite runAction:playSound];

複数アクションを同時に実行

回転しながら透明度を0にする
SKAction *rotateTo = [SKAction rotateByAngle:M_PI duration:1.0];
SKAction *fadeAlphaTo = [SKAction fadeAlphaTo:0.0 duration:1.0];
SKAction *group = [SKAction group:@[rotateTo,fadeAlphaTo]];
[sprite runAction:group];

複数アクションを順番に実行

2倍に拡大後、フェードアウト
SKAction *scaleTo = [SKAction scaleTo:2.0 duration:1.0];
SKAction *fadeOut = [SKAction fadeOutWithDuration:1.0];
SKAction *sequence = [SKAction sequence:@[scaleTo, fadeOut]];
[sprite runAction:sequence];

アクションを指定回数だけ実行

平行移動を3回繰り返す
SKAction *moveTo1 = [SKAction moveToX:320 duration:1.0];
SKAction *moveTo2 = [SKAction moveToX:0 duration:1.0];
SKAction *sequence = [SKAction sequence:@[moveTo1, moveTo2]];
[sprite runAction:[SKAction repeatAction:sequence count:3]];

アクションを無限に実行

無限に回転させる
SKAction *rotateTo = [SKAction rotateByAngle:M_PI duration:1.0];
SKAction *rotateForever =  [SKAction repeatActionForever:rotateTo];
[sprite runAction:rotateForever];

待機

3秒待機した後、2倍に拡大
SKAction *wait = [SKAction waitForDuration:3.0];
SKAction *scaleTo = [SKAction scaleTo:2.0 duration:1.0];
SKAction *sequence = [SKAction sequence:@[wait, scaleTo]];
[sprite runAction:sequence];

アクションを逆再生

180度左回転後、180度右回転する
SKAction *rotateTo = [SKAction rotateByAngle:M_PI duration:1.0];
SKAction *reverse = [rotateTo reversedAction];
SKAction *sequence = [SKAction sequence:@[rotateTo, reverse]];
[sprite runAction:sequence];

イージング

任意のアクション (action) の実行速度を設定する
// アクションを一定速度で実行(デフォルト)
action.timingMode = SKActionTimingLinear;

// アクションを徐々に速く
action.timingMode = SKActionTimingEaseIn;

// アクションを徐々に遅く
action.timingMode = SKActionTimingEaseOut;

// アクション開始から徐々に速くし、終了にかけて徐々に遅く
action.timingMode = SKActionTimingEaseInEaseOut;

まとめ

group と sequence を使えばかなり自由度の高いアニメーションが作成できます。SpriteKit を使えば、ガシガシ動きのあるアプリが簡単に作れますね。

この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

siro:chro 無料ゲーム SQN をリリースしました

img_sqn_00

sirochro 初の無料ゲームアプリ SQN をリリースしました。
記事:SQN: iOS 無料ゲームアプリ SQN - Sequential Numbers をリリース
ちょっとした時間に楽しめる完全無料のゲームなっていますので、是非ダウンロードして遊んでみてください。

↓SQN のダウンロードはこちらから

Related Contents

Pickup Contents