好的,所以我正在为一个工作测验游戏工作。我有自己的影片剪辑上的每个问题(我知道这不是首选的方法,但这是我最熟悉的和压缩的项目时间表有点迫使我的手)。使用SharedObject/AS3加载影片剪辑
由于玩家只能玩一次游戏(涉及奖品),因此我试图实施一个“保存/加载”系统,该系统可以让玩家在离开时停下来,以防他们的浏览器崩溃,他们不小心关闭了游戏窗口等。我已经有一个SO
设置来接受保存数据。因此,举例来说,我对Q1场景的第1帧以下代码:
var currentLevel = "Q1"; //first time the var is defined. "Q1" is the name of the scene
answersSO.data.currentLevel = currentLevel;
answersSO.flush();
而且我对电影的第一个场景的第1帧以下代码:
function checkProgress() {
if(answersSO.data.currentLevel != undefined) {
currentLevel = answersSO.data.currentLevel;
MovieClip(this.root).gotoAndPlay(1, currentLevel);
} else {
gotoAndPlay(2);
}
}
checkProgress();
第一,我得说我是AS的真正核心。我测试玩游戏到Q1场景,然后关闭窗口。我重新开始游戏,它立即跳过场景1并进入场景2(这是游戏的前奏,而不是Q1)。没有错误被抛出。
我想要做的是将一些数据保存到currentLevel
变量,并将该变量保存到SO
。在游戏开始时,脚本应检查SO
是否有任何数据。如果没有,那么没有保存数据 - 正常进行。如果有是数据,请加载并播放播放器所在的最后录制场景。
我想不出(1)如何得到这个工作,(2),稍差的重要性,为什么被抛出任何错误。
编辑!
这是我更新的代码:
stop();
import flash.net.SharedObject;
var answersSO:SharedObject = SharedObject.getLocal("PWFGame"); //DECLARE SO VARIABLE
var currentProgress = "";
//CHECK SO FOR PROGRESS
checkProgress();
function checkProgress() {
if(answersSO.data.currentLevel == null) {
nameField.text = "Enter Name Here";
gotoAndPlay(2);
} else {
currentProgress = answersSO.data.currentLevel;
MovieClip(this.root).gotoAndPlay(1, currentProgress);
}
}
它确实工作,但在else
声明的最后一行得有些奇怪。它完全跳过第一个场景,并从第1帧开始播放下一个场景(称为“Intro”)。即使我将currentProgress
更改为"Q1"
,它也会执行同样的操作。为什么这行代码可以在其他地方工作,而不是在这里?
首先,跟踪'answersSO.data.currentLevel'中的内容,也许有垃圾。也许你没有正确初始化SO,所以每次启动应用程序时都会覆盖它。 – Vesper
谢谢,我刚刚尝试过。它将Q1节省下来。我尝试将数据更改为“Q1”,以便SO还存储报价。那么,现在错误被抛出那个场景“Q1”没有被发现。 –