忍者ブログ

チラシとペン

Tonyu System 2の細かいこと

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Tonyu System 2の細かいこと

Tonyu System 2の細かいことの自分用備忘録を書き連ねていく。(2016-0331時点)
ダウンロード版Tonyu2のwww\kernelフォルダにBaseActorなどのソースコードファイルがある。細かい挙動が分からない場合などはそれらを見てみると解決するかもしれない。
始めに、各々の機能(特に公式リファレンスに載っていない機能)は、いつ仕様が変わってもおかしくないことに注意する。

初期化

Actorクラスには画面出現時に呼び出されるonAppearメソッドがある。これをオーバーライドして初期化処理を書き込めば、明示的に初期化するコードを書かなくてよい。

TQuery等
all(class)とhide()
hideメソッドにより非表示にしたオブジェクトは、allメソッドに無視されるようになる。allCrash等も同様。非表示にはしたいがTQueryには欲しい場合は、透明の画像を用意するなどhide以外の方法を取る。

動作制御
die
dieメソッドはオブジェクトそのものの削除を行っているわけではない。オブジェクトを参照する変数がある限りは、データが残っている。一度dieを実行されたオブジェクトは、以降自分では処理を行わず、parallelなどで新規スレッドを立ち上げることもできなくなる。

描画関係
画像のパターンの縦横サイズの取り方
・BaseActorクラスに非待機メソッドdetectShapeがある。これを呼ぶと
pに入っている画像パターンの縦横サイズがオブジェクトのフィールドwidthとheightに書き込まれる。
・BaseActorのdrawメソッドは毎回detectShapeを呼び出しているため、オブジェクトの画像描画後はwidthとheightに描画した画像パターンのサイズ値が残っている。
・$imageListには画像パターンそれぞれのプロパティが収められている。
pImg = $imageList[p];
obj_width = pImg.width;
というように、画像リストのパターン番号p番のパターンのwidthとheightを取得できる。
pに値を何も設定してない場合等の画像
Actorオブジェクトのpがundefined等読み取れない値の場合はp=0として扱われる。初期状態では画像リストの一番初めの画像の0パターン目が緑の箱なので、緑の箱が表示される。

音声関係
T2MediaPlayer
起動時の大音量
iOSでの実行時、ゲームが起動しても画面がタップされるまでは音が鳴らず、それまでに実行された再生命令は溜まり続ける。タップして音が鳴るようになった瞬間溜まった命令がすべて一度に音を鳴らすので、爆音が出る場合がある。
以下はマッキーさんによるサウンドのテスト。iOSの環境があるなら、再生命令が溜まるとどのようになるか体感できる。
http://jsdo.it/makkii_bcr/WNbk
解決には、iOSで起動した場合に限り、タップされるまでゲームが始まらない待機モードを実装する等が考えられる。
muteフラグ
$soundにmuteフラグがある。trueに切り替わった時、今鳴っている音は消えず、新しくplayBGMやPlaySEで音を鳴らすことができなくなる、という挙動。その場で音のON、OFFが切り替わり、BGMの更新等は無視しないで欲しいという場合、音量を0にする方法を取る。
BGMの一時停止と再開
$soundクラスのメソッド、pauseBGM()とresumeBGM()を利用する。名前の通り、呼び出すだけでpauseBGMは再生中のBGMを一時停止、resumeBGMは再生の再開を行う。
SEの音量が変わらない?
リファレンスに載っているsetBGMVolumeは、その名のとおりBGMにのみ効果がある。鳴っている最中のSEの音量は変えられないが、これから鳴らすSEの音量は、$sound.PlaySE($se_se001,vol)という風に、鳴らす時に第2引数で0~128の間で指定できる。
鳴っているSEの停止
$sound.PlaySEの戻り値を保存しておけば、$sound.stopSE(playing_se)という風にstopSEに渡すことでそのSEを止めることができる。
エラー Cannot read property 'gain' of undefined
BGMが鳴り終わったタイミングでこのようなエラーが出て止まる場合、BGMを鳴らしているplayBGMの引数を見直す。第二引数にはBGMをループさせるかどうか決めるフラグを入れる必要があり、省略はできない。

その他
loadPage
存在するすべてのオブジェクトにdieメソッドを実行させる。グローバル変数は初期化されず、そのためグローバル変数に参照されているオブジェクトは動作は止まるが引き続き参照はできる、という状態になる。(なお、これはallメソッドでオブジェクトを取得するため、hideを実行して画面に現れなくなったオブジェクトは無視され、影響を受けず動作し続けることに注意する)
PR

リンク

P R