Ti.tokyo.GIG「Titanium Mobile でRPG開発」

3,455 views

Published on

2012/01/21に催されたTi.tokyo.GIGで発表した「Titanium Mobile でRPG開発」のスライドです。
途中のデモ動画についてはyoutubeにて公開しております。http://youtu.be/nO3kHz5HGBI

Published in: Entertainment & Humor
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,455
On SlideShare
0
From Embeds
0
Number of Embeds
856
Actions
Shares
0
Downloads
14
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Ti.tokyo.GIG「Titanium Mobile でRPG開発」

  1. 1. Titanium Mobile で RPG 製作 <ul><li>2012/01/21 @wangzhi </li></ul>
  2. 2. 自己紹介 <ul><li>@wangzhi あ </li></ul><ul><li>職場:株式会社オープンスマイル </li></ul><ul><li>    のディレクターしてます </li></ul><ul><li>Ti 歴: 5 ヶ月目 </li></ul><ul><li>好きな API : Ti.Media.createSound </li></ul>
  3. 3. まずはブツを見せろよ! タイトル:   倚天劍 ー いてんのけん ー ジャンル:    RPG 対象 OS :    iOS のみを予定しています 価格:    350 円で発売したいです デモ動画はウェブで! http://youtu.be/nO3kHz5HGBI
  4. 4. 構成 app.js プログラムエントリー eventloop.js setInterval のラッパーオブジェクト soundControll.js eventloop サウンド制御、フェード処理など title.js タイトル画面 map.js フィールドをボタン化した画面 adventure.js 冒険画面
  5. 5. ゲームはイベントループで動く   // eventloop.js 読み込み   var el = require( &quot;lib/eventloop&quot; );   // イベントループ開始   el.start();   // 350msec ごとにイベントキューを監視   el.registFunc( function () {   bx.ui.adventure.popEventQueue();}, 350 ); eventloop は setInterval のラッパー。 ほんとにこの処理が必要かは不明。 誰か教えてください ... 350msec の理由は特別ない。 綺麗にログが流れる速度に調整。
  6. 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 に投げ込んでいる。
  7. 7. サウンドもイベントループで制御 <ul><li>// サウンド専用イベント処理 </li></ul><ul><li>var popSoundEventQueue = function () { </li></ul><ul><li>for ( var k in soundEventQueue) { </li></ul><ul><li>// イベントキューが空 </li></ul><ul><li>if (soundEventQueue[k].length <= 0 ) </li></ul><ul><ul><ul><li>continue ; </li></ul></ul></ul><ul><li>// キューに設定されたファンクション実行 </li></ul><ul><li>soundEventQueue[k][ 0 ](); </li></ul><ul><li>// 実行したキューの中身を除去 </li></ul><ul><li>soundEventQueue[k].splice( 0 , 1 ); </li></ul><ul><li>} </li></ul><ul><li>}; </li></ul>イベントキューを配列で扱う。 配列にすることによって、 別々の曲をクロスフェードしたり 細かなフェード処理時間が指定できる。
  8. 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. 9. アニメーション関連 ・ヌルヌル動くとこは大体 animate() 。  イベントループでもある程度は動かせるけど  今のところは animate() で全て解決させている。 ・ animate() の complete で次の animate() 実行すると一瞬止まる。  抜け道としては view を 2 重にして一つの animate をしている間  もう一つの view を delayTime 付きの animate にすると良い。 -> これからゲーム作り始めるならば   quickTiGame2D などを利用したほうが良い。  但し animete との併用はできないので注意。
  10. 10. 唐突にまとめ ・あくまでも目的はゲームを作ることであって   Titanium Mobile は手段の選択の一つ。手段としてはアリ! ・ Titanium Mobile でもゲーム開発で苦労する点は  他の環境とそんなに変わらないんじゃないかと思う。  実現したいコードはある程度書ける。  ゲーム作る知識や経験のある人にもっと先を走って欲しい。 ・誰か Sprite のモジュールを作ってください。  細かい画像の管理で限界が来ていますw
  11. 11. Thank you!

×