我正在研究Flash CS5 Professional中的Flash遊戲,最終將在iPhone上運行(因此iOS標記)。我目前正在設計代碼的保存遊戲部分,我試圖設置當有人第一次運行遊戲並且保存遊戲文件尚不存在時發生的情況。這裏是我的代碼:Flash CS5處理「文件不存在」FileMode.READ情況中的錯誤
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文件,並把它放入savedGame變量兩個功能。然後xmlSave創建XML文件。至少這是應該發生的事情。現在,當它到達
fileStream.open(file, FileMode.READ);
我得到錯誤#3003:文件或目錄不存在,這意味着我的ioReadErrorHandler是不是做的伎倆在這裏。如果我創建該文件並保存它,那麼這段代碼完美工作,我可以跟蹤(savedGame),它顯示得很好。但是如果我試圖去創造它(正如我提到的那樣,它必須在遊戲第一次運行時),這就是我最終的目標。我在這裏錯過了什麼,或者IOErrorEvent.IO_ERROR不是我需要做的工作嗎?
此外,一旦完成(當然正常工作),它會返回到FileMode.READ並再試一次?或者錯誤是否會將你從函數中分離出來,並且需要再次運行?
沒關係...終於找到我的問題了。事件只適用於看起來異步的操作,我的代碼是同步操作。而不是事件,我做了這個,而現在它完美的作品!對於任何可能感興趣的人來說。 'try {} \t fileStream.open(file,FileMode.READ); (e:IOError){ \t \t createFile(); \t \t xmlSave(); \t}' – FlashNoob468