エモンのブログ(スマホアプリ作成日記) -19ページ目

エモンのブログ(スマホアプリ作成日記)

エモンのブログです。

GooglePlayとAppStoreにアプリをリリースしてます。
「詰将棋パラダイス」4500問無料で公開。
「みんなのしょうぎ」投票型の将棋対局。いずれもソーシャルアプリなので、ソーシャルゲーム作成に興味があるかたは是非ご覧ください。

AIR&Cakeでソーシャル系のゲーム作ってます。
ソーシャルでは通信部分がキモとなりますが、主に3つのエラーハンドリングをせねばならんなあと昨日急に思い立ち、備忘録代わりとして記事を書いていきます。

1. タイムアウトエラー

原因は通信状態が悪かったり、サーバが落ちてるなどです。
サーバからの応答が返ってこないのに「LOADING...」の文字をいつまでも出すわけにはイカンですよね。
AIR側ではLOADINGと表示するのと同時にタイマーをセットしておきましょう。
this.timer=new Timer(5000,1);
this.timer.addEventListener(TimerEvent.TIMER, onTimer);
this.timer.start();

5秒サーバからの応答がない場合はonTimer関数が呼ばれますが、そこでは通信時に使っていたURLLoaderインスタンスのEvent.COMPLETEイベントを解除、LOADING...を止めて、適宜再通信ボタンを表示する。エラーメッセージとしては「通信エラーになりました。電波の良いところでもう一度やり直してください」ってな感じですかね。

2. セッション切れエラー

AIRアプリにおけるユーザアカウント管理をしてみた。(その1)でも書きましたが、ユーザアカウントを管理する場合はセッションキーを発行して、それをAIR側にSheredObjectか何かで保持しておく必要があります。
セキュリティの都合で一定時間経過したり、ユーザが別端末でログインした場合、そのセッションキーは切れてしまいます。無効になるわけですね。
その無効状態で通信し始めると当然DB更新などが行えないわけなのでどうにかしたいですよね。
まずはその発生状況から。
AIR側で通信する際に保持していたセッションキーをサーバへPOSTします。サーバ側でセッションキーの照合を行いますが、そのセッションキーが見つからない場合、cakeErrorでも投げときましょう。ここでのcakeErrorはトランザクションエラーやその他エラーとは違うので2番目の引数には別の値を入れておきますか。
cakeErrorについてはAIRアプリ制作のその2をご覧下さい。
以下は一例です。
//ユーザデータを取得
$userData = $this->model('User')->getUserDataFromSessionKey($sessionKey);
//ユーザデータが取得できない場合はエラー
if(empty($userData)) $this->cakeError('error', 1);

cakeError側はこんな感じ
function error($params=1) {
Configure::write('debug', 2);
$this->autoRender =false;
echo 'd=0&error='.$params;
}

ここでAIR側にerror=1を返すことができます。
AIR側ではerror=1を受け取ったタイミングで通信時に使っていたURLLoaderインスタンスのEvent.COMPLETEイベントを解除、LOADING...を止める。エラーメッセージとしては「アカウントエラーになりました。再ログインしてください」ってな感じですかね。
非同期通信の良さとして、ログインwindowを今の画面のまま表示させることができ、ログインしたらそのままプレイ続行できるところにありますね。

3. サーバエラー

DB更新ミス、トランザクションエラー時におこります。適当にcakeErrorを投げることになるでしょうが$this->cakeError('error', 2);としてさっきとは違う情報をAIR側に投げてあげましょう。
AIR側でerror=2を受け取ったタイミングで通信時に使っていたURLLoaderインスタンスのEvent.COMPLETEイベントを解除、LOADING...を止める。再通信ボタンの表示をする。エラーメッセージとしては「サーバエラーになりました。解決しない場合はお問い合わせ下さい」ってな感じですかね。


「デコポニテの魔女」はスマートフォン用簡易右スクロールシューティングゲームです。
Android端末(google play)⇒  iOS端末(app store)⇒
Technology By: Adobe AIR & CakePHP
PHPエンジニアとして見てFlash/AIRを検証(9割趣味で)してましたが、やっぱFlashはオワコンじゃないすね。
イラスト、デザイン、クライアントサイドプログラム、サーバサイドプログラムなどの観点からみてAIRはソーシャルゲームを作るのにピッタリだと思うんだけどどうでしょうね。
これは実際に自分が作って世の中にだすことでしか証明できないから頑張ります。

現在スマホ用詰将棋アプリも6作目を制作完了し、6本目はapp storeにて申請中。
Adobe AIRのStageWebViewを使って広告を出すというスタイルで果たして稼げるのか?という疑問があったんですけど、結論を言うと稼げました。

詰将棋っていう分野はニッチだけれどもある意味鉄板で、最低ラインのダウンロードは保たれるという意味もあります。またアクションゲームも2本出しました。
AIR/Flashでゲームやアプリを作っていて感じるのは、イラスト、デザイン、プログラムの融合のスピード感が良く、カジュアルなゲームを作る分には素晴らしい開発環境だと言うことですね。
つまり現在のソーシャル系のアプリを作る分にはかなり有力であると感じたわけです。

通信系も非同期通信ができ、エラーハンドリングもかなり自由に設計できます。
この辺は「デコポニテの魔女STG」を見てもらえばわかるかと思います。


「デコポニテの魔女」はスマートフォン用簡易右スクロールシューティングゲームです。
Android端末(google play)⇒  iOS端末(app store)⇒
Technology By: Adobe AIR & CakePHP

「市原誠の詰将棋」はスマートフォン用詰将棋アプリです。
Android端末(google play)⇒  iOS端末(app store)⇒
Technology By: Adobe AIR

「山川悟の詰将棋」はスマートフォン用詰将棋アプリです。
Android端末(google play)⇒  iOS端末(app store)⇒
Technology By: Adobe AIR

「がもうのの詰将棋」はスマートフォン用詰将棋アプリです。
Android端末(google play)⇒  iOS端末(app store)⇒
Technology By: Adobe AIR

「宗時ヒロシの詰将棋」はスマートフォン用詰将棋アプリです。
Android端末(google play)⇒  iOS端末(app store)⇒
Technology By: Adobe AIR

「デコポニテの魔女エアホッケー編」コンピュータとの対戦型エアホッケーゲームです。
Android端末(google play)⇒  iOS端末(app store)⇒
Technology By: Adobe AIR
2ヶ月ぶりくらいにpixivに投稿しました。
最近はアプリ作成に注力していたのでイラストはチマチマ進捗してました。

$f21emonのブログ

今回色の塗り方に関しては、線にも色をつけてみました。
それだけかな。いままで線が黒だったので、ちょっとキツイ感じがしてたので・・・。
とはいえ、photoshopでグロー効果かければ、線が黒でも気にならない感じにはなりますけどもね。
あと線に色をつけることを前提にして線画描いたので、
いつもより大めに服のしわを描き込むことにしました。色塗ったあと線消してます。
フリルのところに厚みができましたね。

さて次のイラストはアプリ内で使うことになるものです。
それにしてもpixivは無理ゲーやなぁ・・・。