gpt4 book ai didi

ios - Flash CS5 在 FileMode.READ 情况下处理 "file does not exist"错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:25:54 24 4
gpt4 key购买 nike

我正在使用 Flash CS5 Professional 开发一款 Flash 游戏,该游戏最终将在 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 文件并将其放入 savedGame 变量中。然后 xmlSave 创建 XML 文件。至少这是应该发生的事情。现在到了

fileStream.open(file, FileMode.READ);

我收到错误 #3003:文件或目录不存在,这意味着我的 ioReadErrorHandler 没有发挥作用。如果我创建文件并保存它,那么这段代码可以完美运行,我可以跟踪(savedGame)并且它显示得很好。但是,如果我尝试让它创建它(正如我提到的,它必须在游戏首次运行时创建),这就是我最终的结果。我是不是遗漏了什么,或者 IOErrorEvent.IO_ERROR 不是我完成这项工作所需要的?

此外,一旦完成(当然工作正常),它会返回到 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();
try {
fileStream.open(file, FileMode.READ);
} catch(e:IOError) {
createFile();
xmlSave();
}
var str:String = fileStream.readMultiByte(file.size, File.systemCharset);
savedGame = XML(str);
fileStream.close();
}

“createFile():”再次运行创建 XML 文件并将其保存到变量“savedGame”的函数。然后是“xmlSave();”运行一个函数来实际保存文件,因此当它在新设备上第一次运行时,xmlLoad 有一些东西要加载。

关于ios - Flash CS5 在 FileMode.READ 情况下处理 "file does not exist"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7046386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com