0
私は動的にmp3、xml、png、fnt、ttfファイルを(ディレクトリをスキャンして)ロードしようとしています - 基本的には実行時にEmbedタグをシミュレートしようとしています。あるいは、それを別の方法で置くこともできます - 同期ファイルシステムオブジェクトを持つこと。AIR3ディレクトリをメモリにロード
これらの異なるファイルタイプをすべて実行する良い方法はありますか?
ここには動作しない例があります。
public class FileSystemAssets
{
public var assets : Object = new Object();
public static function sanitize(filename : String): String
{
return filename.replace(/[.\/\\\:]/g, '_');
}
private function loadDirectory(dir : File): void
{
for each (var f : File in dir.getDirectoryListing())
{
if (f.isDirectory)
loadDirectory(f)
else if (!f.isSymbolicLink && !f.isPackage)
loadFile(f);
}
}
private function loadFile(file : File): void
{
if (".mp3.xml.png.swf.fnt.ttf".indexOf(file.extension) == 0)
return;
//
// how to do this part properly???
//
var ldr : Loader = new Loader();
var fs : FileStream = new FileStream();
fs.open(file, FileMode.READ);
var bytes : ByteArray = new ByteArray();
fs.readBytes(bytes);
ldr.loadBytes(bytes);
// assets[ sanitize(file.nativePath) ] = ldr.content;
// content should be probably converted
}
public function getAsset(filename : String): Object
{
if(assets[ sanitize(filename) ] == undefined)
return null;
return assets[ sanitize(filename) ];
}
public function reload(rootDir : String): void
{
assets = new Object(); // clear old stuff
var root : File = new File(rootDir);
loadDirectory(root);
}
}
その他の注意:この場合セキュリティ/メモリ/スピードは問題になりません。ロードされたすべてのデータは、信頼できるものとみなされ、メモリに収まるほど小さいとみなすことができます。