好的,所以我正在开展一个问答游戏。我有自己的影片剪辑中的每个问题(我知道这不是首选的方法,但这是我最熟悉的,压缩的项目时间轴有点强迫我的手。)
因为玩家只能玩一次游戏(涉及到奖品),所以我试图实施一个“保存/加载”系统,允许玩家在他们离开的地方继续拾取,以防他们的浏览器崩溃,他们不小心关闭了游戏窗口等。我已经有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),不太重要,为什么没有错误抛出。
EDIT!
这是我更新的代码:
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帧的下一个场景(称为“简介”)。即使我将currentProgress
更改为"Q1"
,它也会做同样的事情。为什么这行代码在其他地方工作而不在这里呢?
答案 0 :(得分:0)
用户可以删除SharedObjects。玩家可以删除该文件并重新开始。 如果有登录名,则应使用服务器端脚本(php,asp等)将该数据存储在服务器上。
因此,在开头添加一个检查,让用户在他的名字尚未存储在服务器上时播放。比在游戏开始时将这个列表格式称为flash。
对于浏览器崩溃,您只能在游戏结束时存储数据。因此,当您刷新页面时,您可以再次启动它。
如果没有用户名,你应该得到其他数据,但它并不是那么简单,因为IP可能会改变,更多重要的数据无法通过Flash播放器检索(你可以用桌面应用程序来做到这一点)与AIR)。
在...... .gotoAndPlay(1,currentLevel);
记住第一个值是场景,第二个值是帧。
纳迪亚
答案 1 :(得分:0)
好的,经过多次挖掘,我发现第1帧gotoAndPlay()
可能会导致问题。我将更新的代码块(见上文)移到了第2帧,一切正常。