2014-01-23 86 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