Ti.tokyo.GIG「Titanium Mobile でRPG開発」
- 3. まずはブツを見せろよ! タイトル: 倚天劍 ー いてんのけん ー ジャンル: RPG 対象 OS : iOS のみを予定しています 価格: 350 円で発売したいです デモ動画はウェブで! http://youtu.be/nO3kHz5HGBI
- 4. 構成 app.js プログラムエントリー eventloop.js setInterval のラッパーオブジェクト soundControll.js eventloop サウンド制御、フェード処理など title.js タイトル画面 map.js フィールドをボタン化した画面 adventure.js 冒険画面
- 5. ゲームはイベントループで動く // eventloop.js 読み込み var el = require( "lib/eventloop" ); // イベントループ開始 el.start(); // 350msec ごとにイベントキューを監視 el.registFunc( function () { bx.ui.adventure.popEventQueue();}, 350 ); eventloop は setInterval のラッパー。 ほんとにこの処理が必要かは不明。 誰か教えてください ... 350msec の理由は特別ない。 綺麗にログが流れる速度に調整。
- 6. 処理はイベントキューに投げる // イベントキューからイベントを実行 bx.ui.adventure.popEventQueue = function () { // イベントキューが空 if ( this .eventQueue.length <= 0 ) return ; // イベントキュー処理待ち状態 if ( this .eventQueueWait) return ; // キューに設定されたファンクション実行 this .eventQueue[ 0 ](); // 実行したキューの中身を除去 this .eventQueue.splice( 0 , 1 ); } eventQueueWait はどうしても 次の処理をさせたくないとき使う ( ex. 入力待ち 処理は eventQueue に push しとけば 実行されるようになっている。 ゲーム中では animate メソッドを eventQueue に投げ込んでいる。
- 8. フェード処理 // フェードイン・アウトの処理 var soundFader = function ( ch , sound , startVolume , endVolume , mSec ) { var loopCount = Math .ceil(mSec / 50); var fadeValue = (endVolume - startVolume) / loopCount; var volume = startVolume; for ( var i = 0 ;i < loopCount;i ++ ) { volume += fadeValue; setVolumeFunction(ch, sound, volume); } } // ボリュームをガンガン設定! var setVolumeFunction = function ( ch , sound , volume ) { soundEventQueue[ch].push( function () { sound.setVolume(volume); }); } イベントループの精度に合わせて 処理回数、ボリューム変化量を計算。 setVolume しているだけ。 曲は予め volume=0 で play() しておく。 曲の立ち上がりが遅いための工夫。
- 9. アニメーション関連 ・ヌルヌル動くとこは大体 animate() 。 イベントループでもある程度は動かせるけど 今のところは animate() で全て解決させている。 ・ animate() の complete で次の animate() 実行すると一瞬止まる。 抜け道としては view を 2 重にして一つの animate をしている間 もう一つの view を delayTime 付きの animate にすると良い。 -> これからゲーム作り始めるならば quickTiGame2D などを利用したほうが良い。 但し animete との併用はできないので注意。
- 10. 唐突にまとめ ・あくまでも目的はゲームを作ることであって Titanium Mobile は手段の選択の一つ。手段としてはアリ! ・ Titanium Mobile でもゲーム開発で苦労する点は 他の環境とそんなに変わらないんじゃないかと思う。 実現したいコードはある程度書ける。 ゲーム作る知識や経験のある人にもっと先を走って欲しい。 ・誰か Sprite のモジュールを作ってください。 細かい画像の管理で限界が来ていますw