Как встраивать внешние файлы данных для извлечения во время выполнения в ActionScript 3?Нужна помощь в архитектуре - PullRequest
1 голос
/ 30 июля 2011

Я пишу Flash-игру, в которой игровые уровни сохраняются в небольших текстовых файлах, которые я хочу встроить в SWF-файл.Мое текущее решение имеет отчетливый запах кода в своем повторении, и я уверен, что есть лучший способ.Мой код в основном:

В классе LevelLoader вставьте все уровни

[Embed( source="levels/1.dat", mimeType="application/octet-stream" )]
protected var level1:Class;
[Embed( source="levels/2.dat", mimeType="application/octet-stream" )]
protected var level2:Class;

Когда уровень должен быть загружен, прочитайте строку:

var bytes:ByteArray;
if ( levelNumber == 1 ) {
    bytes = new level1();
} else if ( levelNumber == 2 ) {
    bytes = new level2();
}
var levelStr:String = bytes.readMultiByte( bytes.bytesAvailable, bytes.endian );
prepareLevel( levelStr );

У этого подхода есть пара проблем:

  • Мне нужно добавить строку для встраивания каждого уровня.Оптимально, все файлы в папке будут автоматически внедрены.
  • Уровень не может быть «подготовлен» из строки.Я хотел бы иметь возможность передавать LevelLoader номер уровня или имя уровня в виде строки.
  • Я думаю, что все строки хранятся в памяти, а не на диске.

КакМогу ли я запрограммировать это "правильно"?Способен ли ActionScript 3 решить эту проблему?

1 Ответ

0 голосов
/ 30 июля 2011

Вам нужно будет встраивать каждый файл по отдельности, если вы не решили загружать файлы по требованию.Даже если можно указать компилятору включить некоторые файлы, не относящиеся к сценариям, на которые нет ссылок в коде, вам необходимо связать эти файлы с переменными.

Однако вы можете динамически использовать доступ к файлам уровня.

function startLevel(levelId : uint) : void {
    var bytes : ByteArray = new (this["level" + levelId])();
    ...
    prepareLevel(levelStr);
}

Конечно, все ваши уровни хранятся в памяти.Чтобы избежать этого, вы можете загрузить данные уровня, используя URLLoader.

...