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

Contenu connexe

En vedette

Andrea Stephania Betancur Granda
Andrea Stephania Betancur GrandaAndrea Stephania Betancur Granda
Andrea Stephania Betancur Granda
Andreea Stephania
 
Still photo assignment
Still photo assignment Still photo assignment
Still photo assignment
StephanieUNCA
 
Olivia lammers a day in the life
Olivia lammers a day in the lifeOlivia lammers a day in the life
Olivia lammers a day in the life
olammersp1
 

En vedette (16)

History
HistoryHistory
History
 
Towards an effective structural budget balance for economic stability
Towards an effective structural budget balance for economic stabilityTowards an effective structural budget balance for economic stability
Towards an effective structural budget balance for economic stability
 
Andrea Stephania Betancur Granda
Andrea Stephania Betancur GrandaAndrea Stephania Betancur Granda
Andrea Stephania Betancur Granda
 
Still photo assignment
Still photo assignment Still photo assignment
Still photo assignment
 
Pictures
PicturesPictures
Pictures
 
Presentation1
Presentation1Presentation1
Presentation1
 
Fotos peques
Fotos pequesFotos peques
Fotos peques
 
Public Outreach for EU-FP7 Research Projects in Solar Science
Public Outreach for EU-FP7 Research Projects in Solar SciencePublic Outreach for EU-FP7 Research Projects in Solar Science
Public Outreach for EU-FP7 Research Projects in Solar Science
 
Shale Gas: Market Opportunities and Challenges in the EU and Ukraine
Shale Gas: Market Opportunities and Challenges in the EU and UkraineShale Gas: Market Opportunities and Challenges in the EU and Ukraine
Shale Gas: Market Opportunities and Challenges in the EU and Ukraine
 
Olivia lammers a day in the life
Olivia lammers a day in the lifeOlivia lammers a day in the life
Olivia lammers a day in the life
 
Cc content
Cc contentCc content
Cc content
 
Molly
MollyMolly
Molly
 
Riprogettare il welfare. Socializziamo le buone pratiche, promuoviamo l’innov...
Riprogettare il welfare. Socializziamo le buone pratiche, promuoviamo l’innov...Riprogettare il welfare. Socializziamo le buone pratiche, promuoviamo l’innov...
Riprogettare il welfare. Socializziamo le buone pratiche, promuoviamo l’innov...
 
Document bcr
Document bcrDocument bcr
Document bcr
 
Richard avedon
Richard avedonRichard avedon
Richard avedon
 
Banalytics - Monetizing corporate big data | Instarea
Banalytics - Monetizing corporate big data | InstareaBanalytics - Monetizing corporate big data | Instarea
Banalytics - Monetizing corporate big data | Instarea
 

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

  • 1.
  • 2.
  • 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( &quot;lib/eventloop&quot; );   // イベントループ開始   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 に投げ込んでいる。
  • 7.
  • 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