Я пытаюсь динамически загружать файлы mp3, xml, png, fnt, ttf (путем сканирования через каталог) - по сути, пытаюсь симулировать тег Embed во время выполнения.Или, другими словами, наличие синхронного объекта файловой системы.
Есть ли хороший способ сделать все эти разные типы файлов?
Вот нерабочий пример.*
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 );
}
}
Другие примечания: безопасность / память / скорость не имеет значения в этом случае.Все загруженные данные можно считать надежными и достаточно маленькими, чтобы помещаться в память.