Я работаю над флэш-игрой во Flash CS5 Professional, которая в конечном итоге будет работать на iPhone (отсюда и тег iOS). В настоящее время я разрабатываю часть кода для сохранения игры и пытаюсь настроить, что происходит, когда кто-то запускает игру в первый раз, а файл сохраненной игры еще не существует. Вот мой код:
public class SaveGameFile extends MovieClip {
private var file:File;
private var savedGame:XML;
public function SaveGameFile() {
addEventListener(Event.ADDED_TO_STAGE, addedFileSystem);
}
private function addedFileSystem(event:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, addedFileSystem);
file = File.applicationStorageDirectory;
file = file.resolvePath("saveGame1.xml");
xmlLoad();
}
private function xmlLoad():void {
var fileStream:FileStream = new FileStream();
fileStream.addEventListener(IOErrorEvent.IO_ERROR, ioReadErrorHandler);
fileStream.open(file, FileMode.READ);
fileStream.addEventListener(Event.COMPLETE, xmlLoadCompleteHandler);
}
private function xmlLoadCompleteHandler(event:Event):void {
var fileStream:FileStream = event.target as FileStream;
fileStream.removeEventListener(Event.COMPLETE, xmlLoadCompleteHandler);
var str:String = fileStream.readMultiByte(file.size, File.systemCharset);
savedGame = XML(str);
fileStream.close();
}
private function ioReadErrorHandler(event:Event):void {
var fileStream:FileStream = event.target as FileStream;
fileStream.removeEventListener(IOErrorEvent.IO_ERROR, ioReadErrorHandler);
createFile();
xmlSave();
}
В ioReadErrorHandler у меня есть еще две функции, которые в основном создают файл XML и помещают его в переменную saveGame. Затем xmlSave создает файл XML. По крайней мере, так и должно быть. Прямо сейчас, когда дело доходит до
fileStream.open(file, FileMode.READ);
Я получаю сообщение об ошибке # 3003: файл или каталог не существует, что означает, что мой ioReadErrorHandler здесь не работает. Если я создаю файл и сохраняю его, то этот код работает отлично, и я могу проследить (saveGame), и он обнаруживается просто отлично. Но если я попытаюсь заставить его создать его (что, как я уже говорил, должно быть при первом запуске игры), это то, где я в конечном итоге. Я что-то здесь упускаю или IOErrorEvent.IO_ERROR - это не то, что мне нужно для этой работы?
Также, как только это будет сделано (и, конечно, будет работать правильно), вернется ли он в FileMode.READ и попробует ли снова? Или ошибка фактически вырвала вас из функции, и ее нужно запустить снова?