好的,所以我正在爲一個工作測驗遊戲工作。我有自己的影片剪輯上的每個問題(我知道這不是首選的方法,但這是我最熟悉的和壓縮的項目時間表有點迫使我的手)。使用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」沒有被發現。 –