2011-03-16 22 views
0

我在Flash CS5和ActionScript 3.0製作一個簡單的平臺遊戲。當玩家失去一生時,我希望它將玩家重定向到「遊戲結束」屏幕,他們可以選擇「再試一次」按鈕重新開始遊戲。故障復位對象/閃存CS5

我無法找到一個方法來做到這一點。我一直在試圖通過執行以下操作來完成我的目標:

  • 設置應有盡有(播放器,背景等),以可見=影片剪輯假
  • 集「遊戲結束」可見= TRUE(這是在遊戲過程中不可見的)
  • 已在「遊戲結束」的影片剪輯隱藏影片剪輯中的按鈕,然後重新顯示所有的遊戲元素,玩家開始的
  • 復位位置,設置分數爲0,活到3,等..

這是probab雖然這不是一個很好的方法,但如果它有效,那麼我很高興。我只想讓「遊戲結束」屏幕短暫顯示,如果玩家點擊「再試一次」按鈕,他們可以從頭開始玩。

現在,我上面實現的問題是,當我將所有遊戲元素設置爲false後,將它們設置爲visible = true時,遊戲已停止。鍵盤輸入不會重新激活,遊戲元素顯示但不活動。是否有關於我不知道的可見屬性的內容?它是否與一個對象的「狀態」混淆?

下面是一些代碼片段從ActionScript文件...

if(lives >= 0) { 
        //print number of lives 
       } 
       else { 
        gameOverFlag= true; 

        //hide game objects, show game over menu 
        Coins.visible = false; 
        Platforms.visible = false; 
        Background.visible = false; 
        StartPosition.visible = false; 
        thePlayer.visible = false; 

        GameOver.visible = true; //this is the movie clip with the "Game over" text and "Try again" button in 
        GameOver.TryAgainButton.addEventListener(MouseEvent.CLICK, playagain); 

       } 


function playagain(event:MouseEvent):void 
    { 
     //start game again 

     Coins.visible = true; 
     Platforms.visible = true; 
     Background.visible = true; 
     StartingPosition.visible = true; 
     thePlayer.visible = true; 
    } 
+0

你有一個主要的遊戲循環,你可以停止和重新啓動,而不是玩可見性?當你完成它之後,你是否也會從再次嘗試按鈕中移除事件監聽器? – Sam 2011-03-16 19:47:30

+0

你可以嘗試的其他東西就是將對象的x值設置爲離開屏幕。 – Sam 2011-03-16 19:48:19

回答

0

這比一個代碼問題的架構問題。就我個人而言,我在所有自定義類上創建了reset()函數。在這個函數內部,我可以根據需要將對象設置爲默認狀態;設定位置,α,可見,自定義道具等

至於何時調用它,它真的取決於你,但你的好設計模式將是國家的設計模式。

基本上,你在你的遊戲,擁有和控制不同State對象StateManager。這些State對象可以表示您的遊戲的不同狀態; MainMenuPlayGameOverReset

每個State將具有begin(),一個end()和可能的update()。當您的StateManager開關處於狀態時,它將在State上撥打end(),在State上撥打start()。您一次只能在一個State中,因此您可以根據自己在遊戲中的位置輕鬆地封裝邏輯。

裏面的begin()功能,您可以設置您需要爲特定狀態的一切。例如,您的Play狀態的begin()函數可以添加您需要控制遊戲的所有鍵盤/鼠標事件偵聽器。在end()功能中,您清除了您設置的所有內容。例如,在Play狀態的end()函數中,您將刪除所有鍵盤/鼠標事件偵聽器。這意味着玩家不可能執行任何遊戲邏輯,除非他們處於Play狀態。如果您的State中有update()函數(這稱爲每幀),那麼您可以在Play示例中檢查玩家是否已經沒有更多生命,或者已經達到了下一關的分數。

對於復位邏輯,在您的Reset狀態下,您可以在所有對象上調用reset()函數,或者手動設置它們。通過你的遊戲狀態的路徑應該是這樣的:

MainMenu(播放) - >Reset(或Init狀態) - >Play - >GameOver(重播) - >Reset - >Play

有沒有內置邏輯來重置對象,你需要自己照顧它。採用這種模式可以幫助解決這個問題。

+0

順便說一句,使用狀態意味着很容易拋出GameOver屏幕x秒 - 只需要一個更新(),在移動到下一個狀態前倒計時x秒 – divillysausages 2011-03-16 20:08:07

+0

另外,我注意到您沒有將gameOverFlag設置爲假playagain() - 也許這就是問題:D – divillysausages 2011-03-16 20:08:43

+0

感謝您的回覆!我會仔細查看我的代碼,看看我的任何愚蠢的人爲錯誤是否應該首先歸咎於,然後嘗試並執行上述建議。偉大的建議,非常感謝! :) – james246 2011-03-16 23:46:16

0

我已經有了瀏覽器和平臺的經驗,給我的顯示/隱藏代碼略有不同的實現。有時需要將元素從舞臺(object.x = -3000)中移除以完全禁用它們。這不是一個好的做法,但是如果你只需要繼續前進,就可以避免啓用和禁用對象的衝突!

絕對使用reset()函數來包裝切換對象屬性的所有內容。