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);
}
}
其他注意事项:在这种情况下,安全/内存/速度不是问题。所有加载的数据都可以被认为是可信的,并且足够小以适应内存。