2014-01-23 87 views
0

好的,所以我正在为一个工作测验游戏工作。我有自己的影片剪辑上的每个问题(我知道这不是首选的方法,但这是我最熟悉的和压缩的项目时间表有点迫使我的手)。使用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",它也会执行同样的操作。为什么这行代码可以在其他地方工作,而不是在这里?

+0

首先,跟踪'answersSO.data.currentLevel'中的内容,也许有垃圾。也许你没有正确初始化SO,所以每次启动应用程序时都会覆盖它。 – Vesper

+0

谢谢,我刚刚尝试过。它将Q1节省下来。我尝试将数据更改为“Q1”,以便SO还存储报价。那么,现在错误被抛出那个场景“Q1”没有被发现。 –

回答

0

好了,经过多次挖掘,我发现gotoAndPlay()第1帧可能会引发问题。我将更新的代码块(见上)移动到第2帧,并且一切正常。

0

共享对象可以被用户删除。玩家可以删除该文件并重新开始。 如果有一个登录名,您应该使用服务器端脚本(PHP,ASP等)

所以在开始添加一个检查,让只是,如果他的名字有用户播放存储在服务器上的数据未被存储在服务器上。比在游戏开始时将这个列表形式称为flash。

对于浏览器崩溃,你可以存储只有当游戏结束的数据。所以当你刷新页面时,你可以重新开始。

如果没有用户名,你应该得到其他数据,但它不是那么简单的一个IP可能会改变,更重要的数据不能由Flash播放器检索(你可以用一个桌面应用程序做用AIR制成)。

在与... .gotoAndPlay(1,currentLevel);

Remeber第一值是场景和第二个是该帧。

纳迪亚

+0

我不关心删除SO的用户。我知道他们的局限性,但我在公司办公室工作,即使他们知道SO是什么,绝大多数人也不知道该怎么做。 –

+0

有像ccleaner一样点击的软件。 无论如何,这取决于用户的目标,但如果有奖品,很容易有人会试图作弊。 – Nadia

+0

无论如何,你尝试过: ... gotoAndPlay(currentLevel,1); – Nadia