戯言徒然日記開発日記東方DTMC/C++DoJaLuaCG備忘録
気が向いたら創作活動とかしてる人のチラシの裏。
--.--.-- --
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2008.06.08 Sun
 iアプリを開発しているとたまにエミュレーターでは実行不可能なものの、実機では問題なく動作するコードに出会うこともあります。そういったコードはデバッグの際に鬱陶しいこともあるので対応策を紹介します。
続きを読む
スポンサーサイト
2008.06.08 Sun
 iアプリに限らずゲーム開発では三角関数を高速に処理したいものです。よく使われる三角関数のテーブル化について書いてみます。
2008.04.16 Wed
 前々から bat ファイル使えるようになりたいなぁなんて気持ちもあったことと、クラス量産しまくって容量増えてきたという必要(?)に迫られて、作ってみました。せっかく頑張って作ったので公開してみます。

ご使用は自己責任でお願いします(^^;)間違い・アドバイスありましたらご教示くださいm(_ _)m)

 DL:optimize.bat

 こちらの、Jarg, 7zip による Jar ファイルサイズ削減、で紹介されているソースを改変して作成しました。誠に勝手ながら今回公開してますが、作成者様、もし問題があるようでしたらご連絡ください。削除いたします。

[変更点]
・Jargをかける前にProGuardをかけるようにした。
・作業フォルダ名をbinからworkへ。
・圧縮対象jarファイルがC以外のドライブに存在しても実行可能にした。
・万が一の為に(いろいろ不安なので)元のjarファイルのバックアップを作成するようにした。
・Dual Core CPU向けに少しチューニング。

[使い方]
・optimize.batの上の方に書いてある下準備を行ってください。
・下準備が整ったら、設定項目を変更します。4カ所あります。適当に入力してますので、習って自分の環境に合わせて見てください。
・圧縮したいjarファイルをドラッグ&ドロップしましょう。
※同じディレクトリに同名の.jamファイルを入れて置いてください。でないとエラーでます。

[Tips]
7za a -tzip "%TARGET_F%" * -mfb=128 -mpass=15 -mmt=2 -r -y > nul
-mmt=2というところを消すとスレッド1つで作業になります。クアッドコアならば4で最速?保証はないですが調整してみてください。圧縮オプションに関してはよくわかってないもののそれっぽいのにしてます。
2008.02.29 Fri
 実用化できたらやばい技術で話題に挙げているテクニックについての情報。誰もが思いつくと書いているように大したことではないですが、場合によっては有用なこともあります。ということで何かしらのアイデアにつながればいいかなっと思って書いてみます。
2008.02.23 Sat
以下私的メモ。

MFiデータ(.mld)をループ再生させる方法は4つほどありそう。

とりあえずJavaDocにも載ってる初期化みたいなの。
// AudioPresenter を取得する
AudioPresenter ap = AudioPresenter.getAudioPresenter();
// トラックを指定する
ap.setAttribute( AudioPresenter2.TRACK_ASSIGNMENT, 0 );
// MFi を読み込む(リソースに sunny.mld がある場合)
MediaSound sound = MediaManager.getSound( "resource:///sunny.mld" );
try {
sound.use();
} catch( ConnectionException e ) {
e.printStackTrace();
}
// Presenter に MFi を設定する
ap.setSound( sound );

この後で、ap.Play();するだけで通常の再生。曲の末尾まで行くと停止してしまう。


ループさせてみる。同期設定はPlayを呼ぶ前に!

(1) AudioPresenter.ATTR_SYNC_ON 場合

/*
初期化とか
*/

// 同期イベントを発生させる
ap.setAttribute( AudioPresenter.SYNC_MODE ,AudioPresenter.ATTR_SYNC_ON );
// メディアリスナーを設定する
ap.setMediaListener( MediaListenerをimplementsしたクラス );


①AudioPresenter.AUDIO_COMPLETEを待つ場合
public void mediaAction( MediaPresenter source, int type, int param ) {
// 再生が終了した場合
if ( type == AudioPresenter.AUDIO_COMPLETE ) {
// 最初から再生し直す
((AudioPresenter)source).play( );
}
}


②AudioPresenter.AUDIO_SYNCを待つ
→AudioPresenter.setSyncEventで同期用のノートを指定する
(※あらかじめダミーのノートなどを入れておくなどしておく)

再生前に↓を実行して同期イベントノートを指定してやる。
// 同期イベントノートを指定する
ap.setSyncEvent( チャンネル, キー );

→mediaActionメソッドで対処。AUDIO_SYNCが来たらまた最初から再生。

③ループ指定をして再生する
これも再生前に指定してやる。AudioPresenter2のLOOPという点に注意。
// ループ回数を指定する
setAttribute( AudioPresenter2.LOOP ,AudioPresenter.ATTR_SYNC_ON );

※試してないけどおそらくこんな感じかな?

①~③の問題点は指定区間のループができないこと;
またデータがまずいのは承知だけどギャップレス再生のようなことがうまくできなかった。・゚・(ノД`)・゚・。
どうしても曲の末尾まで行くと少し間が空いてしまう。


そこで④の登場。

④MFiのループ命令を埋め込んでおく

CreativeStation様にて公開されている解析データを参考に。

有限ではあるものループ命令をネストすることで相当な回数をループさせることができる。うまく埋め込めばギャップレス再生のようなものもできそう(現在いくつかのノートがオフにならず困ってる;)

今のところバイナリエディタでちまちまと命令を埋め込んでいる;面倒orzそういうツール、もしくはMIDIから変換時になんらかの指定で対応してるなんてものはないのか・・・?orz

ちなみにバイナリエディタで変更する場所。

①ヘッダ部分のファイルサイズ(命令を埋め込むサイズ分+)
②トラックサイズ(同上)
③ループ命令を埋め込む箇所。

命令はトラック内でないと有効にならない模様。また①に関しては変更しなくてもエミュレーターでは動作可能。SH機のみでテストしものの①も変更しないとErrorとなる;
2007.12.28 Fri
 少し使ってみた&調査したことなどを書いておきたい。(間違い指摘などお願いします)

・オプションと標準のGraphics3Dの違い

→オプションのGraphics3Dは902i以降削除されてるみたい。オプションの実装状況を参照。使うなら標準のものにしとく方が無難。

・mbac、mtra、d4dって何?

→mbacはモデルデータなど、mtraはアニメーションデータと考えていいかと。語頭のmはmobileのmかな?MascotCapsuleのサイトに変換プラグインがあるのでそれを使って作る。元になるモデルデータなどは各種3DCGソフトで作成する。

→d4dは複数のモデルデータやアニメーションデータ、さらにはテクスチャも含められる形式。DoJa4.0?から対応している。mbacを使う場合、テクスチャは256色bmpになるけど、d4dの場合はpngを使う。d4dは一端h3t形式に吐きだしたデータをD4D Converterで変換して作成する。512kB以上のd4dファイルは作れないので注意(作らんとは思いますが;)。

→DoJaで3D Graphicsを扱う場合はこの3の形式のファイルを使って行う。それぞれに一長一短があるので、MascotCapsuleのマニュアルを参照のこと。(てかここまで丁寧でわかりやすいマニュアルはじめて。素晴らしいです!)

・MascotCapsuleって何?バージョン何個かあるけど?

→マスコットカプセルはHI社が作成した3Dレンダリングエンジンみたいに書いてあったような。詳しくはけーねまで。DoJaプロファイルにも対応してる。Graphics3DのAPIを使って操作?

→DoJaの場合は特にバージョン気にしないでもいいのかな?V4から扱えるd4dはDoJaでは4.0以降なので、それ以前のプロファイルで作成する場合は注意。

・3DCGソフトって何がある?

→現在試行錯誤中。mbac、mtraを使うか、d4dを使うかで分かれると思われる。

→mbac路線だとフリーのblenderがプラグインで対応。(ただしβバージョン)。その他市販の高価な3DCGソフトが対応、もしくはプラグイン有りです。

→d4dの場合はフリーならメタセコイア。その他は同様に市販ソフトですね。メタセコいいんですが、複数の光源をもてない?っぽいのでそこだけしんどいところです。

→データをXSI modtoolなんかで作成して、他の形式に変換後、さらにそれを・・・なんてことできないですかね?


参考URL
MascotCapsule Developer Network
→マニュアルが丁寧でわかりやすい。サンプル(DLできなかったorz)もあるし、マニュアル読めばすぐコーディングできるかと。その他各種プラグインや仕様書みたいなのもおいてある。

 この調子で書き連ねようと思ったものの面倒なのでやめる(笑)上記サイト一つでほぼ大丈夫だと思います。Web上で見つけたGraphics3Dを使ったサンプルはオプションを使ったものだったので基本APIを使う場合は若干異なりますね。んま、しつこいけどマニュアルの最後にサンプルあるのでそれ読んだらわかると思います(^_^;)
2007.12.09 Sun
 リファクタリング?ではないけど現行アプリを再度クラス化していたところ、少し気になったので作ってみた。

 ArrayList.java

 DojaのVectorクラスを参考にできるだけ近いものを作ったつもり。んまArrayListと銘打ったものの全然Listじゃないですが(笑)
 この自作ArrayListの特徴は挿入・削除の速さでしょうか?テストアプリを作って比較してみました。

 ArrayListTest.java (面倒だったので汚いソースです;)

 実機(SH902i)での結果を表にまとめてみました。アクセスと書き込みが一緒orzほんとに大した差はないだろうとは思ってましたけど;

071209table.png


 単位のないものはすべてナノ秒です。平均して出しました。とりあえず配列速すぎ(笑)現行アプリはクラス持ってないのですべて上記テストアプリのような感じで配列使った疑似クラス?でやってます。

 汎用性を考えるとArrayListもVectorに比べて倍は速いので使えるとは思います。が、配列のこの速さは惜しい(^-^;)どっち使おうか・・・。

 ご自身でテストしてみたい方は直下のQRコードからどうぞ。

QRcode_20071209174603.png

 ちなみに、注意事項ですが、自作のArrayListの場合、配列内に加えられた要素の順序は保証されません。具体的にはremoveAtした場合、最後にaddElementした要素が削除された要素の位置に来ます。これが速さの秘密なんですがね;ゲームの場合、いろいろとソートして使うことが多いので問題ないとは思います。

 このArrayListはSK法レベル1#2ってのを参考にして作ってみました。参考文献は↓です。興味のある方はどうぞ。C++で書かれてますのでその点は注意。ポインタ使えたらもっとスマートに作れますなぁ。参考文献に関しては、正直、これ以外に使えるなぁってのはソートアルゴリズムとそん他ちょっとですが紹介しときます(笑)

 ゲームコーディング〈Vol.3〉アルゴリズム編 (※Amazonのアフィリエイトリンクです!)

 ArrayListに関しては改変するなりして勝手に使っていただいて構いません。というか他のメソッドのテストしてないので大バグあるかも;著作権は放棄してませんがあんまし制限つける気なんてないんで、もし使えそうなら使ってみてください。使った場合ご一報いただけると宣伝したりしますよ?(というか私が喜びます(*^_^*))
Template by まるぼろらいと
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。