ずいぶんと時間があいてしまって、腐りかけの情報になってしまいましたが、
前回の続きです。
ATF素材が無事揃ったので早速使ってみましょう。
Starling でATF素材を使うこと自体は、これを参考にしました。
ATF素材はソースに埋め込む方法以外に、FileStream を使って直接読み込んだ ByteArray を
直接流し込む方法も使えます。今回は、後者の方法を使って読み込むことにしました。
作り始めの頃、逐次読み込んで表示読み込んで表示という作業を繰り返していました。
しかしこの方法だと、どうしても画像の読み込みに時間がかかってしまい、ADVゲームの特性上スキップ
当の早送りの処理が途切れ途切れになってしまいました。
そこで、ある程度の枚数の素材を事前に読み込んでおくことにしました。
この処理よって、ある程度の区切りで読み込み時間がかかるものの、スキップ処理での
途切れ途切れは無くなりました。
そして、一番大切な処理、そう破棄処理!!
これをしないと直ぐにメモリがパンパンになってしまいます。
最初、ここら辺の処理を適当に書いてたので悩みました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var _fileStrem:FileStream = new FileStream(); var _data:ByteArray = new ByteArray; // 読み込み _fileStrem.open( new File("ファイルパス") ); _fileStrem.readBytes(_data, 0); // テクスチャ作成 var texture:Texture = Texture.fromAtfData(_data); // 破棄 // 一番大切!! texture.dispose(); |
一応、これで破棄は完了なのですが、ここで大きな問題が。。。
破棄されてない!! たぶん
デバッグに使ってた Android端末によりけりでしたが、
ある一定の枚数のキャラクタ素材を表示するとゲームが強制終了してしまいました。
現在だったら Adobe Scout を使って
正確にメモリ周りをプロファイリング出来るのですが、
ゲーム制作当時はまだありませんでした。。。
そこで地道にプレイしながらわかったことは、スキップ処理中に
強制終了することが多かったので、
「破棄されていないのではなく、遅れてるだけ」
という仮説を立ててみました。
この仮説通りだとすると、一定量の素材が表示されたタイミングで
ゲームが強制終了してしまう現象にも納得いきます。
最新版の AIR SDK でここら辺の処理がどうなっているかは不明ですが、
当時は詳しく調べる手段もなかったので、意を決して画像フォーマット
自体を変更して制作を進めていくことにしました。
次回、「帰ってきた”JPEG-XR”」編をお楽しみに。