ゲームアプリに限らずiPhoneアプリに於いては アニメーションはユーザーに現在アプリがどのような状況にあるか知らせるために重要な役割を果たします。 其れは画面遷移時の動きに於いても一般です。
開発中のゲームアプリに於いては画面遷移は面クリアー時及びゲームオーバー時などに発生します。 ブロック崩しゲームの面クリアー時には 必ずボール足るキャラクターがブロック足る果物の最後の一つを食す筈です。 またゲームオーバー時にはボール足るキャラクターが地面に落下している筈です。 当然其れ等の処理はプログラム内に記述してあるのですが 全て処理は飛ばされて画面遷移が発生しているとしか思えない状態が発生してしまいました。 プレイヤーに取っては訳も分からず突然画面が切り替わるように感じられる由々しき事態です。
開発機:MacBook Air(11-inch, Mid 2013)
MacOSバージョン:OS X 10.9.1
Xcodeバージョン:5.1
言語:Objective-C
主関連アプリ:uPanda Breaks Out Fruits
原因として考えられたのは複数ある処理の並列的な実行でした。
此処では一つにはどのような状況かをプレイヤーに伝えるアニメーションと一つには画面遷移でした。
処理的な記述としては面クリアー及びゲームオーバー時に両者共に引き鉄が弾かれるため
同時に処理が進行して見た目には画面遷移しか人の見た目には映らない状況と考えたのです。
[self runAction:
[SKAction sequence:@[
[SKAction waitForDuration:3.0],
[SKAction runBlock:^{
// 5
SKTransition *reveal = [SKTransition flipHorizontalWithDuration:0.5];
SKScene * myScene = [[MyScene alloc] initWithSize:self.size];
[self.view presentScene:myScene transition: reveal];
}]
]]
];
これを参考に記述した手元の SpriteKit フレームワークを利用した 画面遷移の前にアニメの処理を待つ処理 のコードが以下になります。
[SKAction sequence:@[
[SKAction waitForDuration:1.0],
[SKAction runBlock:^{
[self.view removeFromSuperview];}
]
]]
];
上記 [SKAction waitForDuration:1.0] の部分で任意の秒数をウェイト時間に設定出来る塩梅で マジックナンバーの 1.0 を書き換えれた時間だけプレイヤーに然るべきアニメーションを提示しウェイトが掛かった後 画面遷移を実行するもので由々しき事態を免れられました。
なおSpriteKitフレームワークを用いて待ち時間を実装する Qiita の2013年10月下旬の以下の記事 SpriteKit入門 -6- も有りました。 今回は手元の環境とは適合せず参考を見送りましたが 孰れ役立つ機会もあるやも知れず取り敢えずリンクを記し置くものです。
バージョン: 4.12
リリース: 2014年9月15日
更新: 2022年4月20日
サイズ : 10.7 MB
互換性: iOS 14.4 以降のiPhone、iPod touch に対応。および、macOS 11.0以降とApple M1 チップを搭載したMac に対応。