儲存、載入與最高分紀錄
有時候,您會想製作一款能記住上次遊玩時某些資訊的遊戲。
要儲存的內容,很大程度上取決於您正在製作的遊戲或 App。無論您想儲存分數、位置,還是整體進度,都需要先規劃要儲存哪些內容,以及何時儲存。
在本教學中,我們會介紹如何儲存玩家分數,並建立簡單的最高分或「先前最佳成績」系統。
本教學假設您已經製作了一款簡單的遊戲,玩家可以撿拾硬幣(製作平台遊戲第 5 部:新增硬幣和分數),而且畫面上有一個標籤顯示硬幣數量。
儲存
談到儲存時,您需要先問自己兩個重要問題:要儲存什麼,以及何時儲存?在 hyperPad 中,「儲存至檔案」行為一次只能儲存一個值。因此,您需要仔細考慮要儲存的內容。
在本教學中,我們會儲存分數(撿到的硬幣數量),這個分數會透過畫面上的標籤顯示。
既然已經知道要儲存標籤上的分數,接下來就要決定何時儲存。
這裡有許多選擇,取決於您的遊戲玩法或整體設計。您可以在玩家每次撿到硬幣時儲存、玩家失敗時儲存、玩家通過關卡時儲存、玩家按下按鈕時儲存,或是在任何您認為適合的時機儲存。
在本教學中,我們會設定一個按鈕,讓玩家按下儲存按鈕時儲存分數。如果您想在玩家失敗或完成關卡時儲存,也可以套用相同的行為邏輯。只要在玩家獲勝或失敗時觸發這些行為即可。
選取「儲存」按鈕物件,並開啟行為編輯器。
在行為編輯器的「互動」類別中,新增「停止觸碰」行為。
接著,在「使用者介面」類別中新增「取得標籤」行為,並將它連接到上一步的「停止觸碰」行為。
點選「取得標籤」行為以檢視其屬性。在行為屬性中,點選代表目前物件的區域,然後選取場景中代表分數的標籤。
接著,在「自訂」類別中新增「儲存至檔案」行為,並將它連接到「停止觸碰」行為。
選取剛新增的「儲存至檔案」行為,以檢視其屬性。請注意,「金鑰類型」設為「現有」。現有金鑰是預先定義的儲存項目。
首先,您需要新增要儲存項目的標題或說明,這稱為「金鑰」。點選「選取或建立金鑰」按鈕,開啟金鑰清單。
在上方輸入一個容易辨識的標題,然後按下 + 按鈕來新增第一個金鑰。由於我們要儲存分數,請將金鑰命名為「Score」。
接下來,您需要將標籤上的分數實際儲存起來。若要這麼做,請將「取得標籤」行為角落的輸出值,拖曳到「儲存至檔案」屬性的輸入欄位中。
完成了!此時,遊戲應該會在您按下儲存按鈕時儲存分數。不過,您還沒有使用已儲存的值。接下來需要載入分數,並在場景中使用它。
載入
儲存分數之後,您需要將它載入並在場景中使用。談到載入時,有一個重要問題需要回答:您想在何時載入?
和儲存一樣,答案很大程度上取決於您的專案。您可以在場景開始時立即載入、在玩家按下按鈕時載入,或在其他事件觸發時載入。這完全取決於您想達成的效果。
在本教學中,我們會在場景開始時載入,並顯示先前儲存的分數。
首先,在場景中新增一個標籤。我們會用這個標籤顯示已儲存的分數。
接下來,我們需要新增實際的載入邏輯。在本教學中,我們會將邏輯加入前面使用的「儲存」按鈕。不過,視您的遊戲而定,可能需要將邏輯放在其他位置。選取儲存按鈕,然後從物件屬性開啟行為編輯器。
在「自訂」類別中新增「從檔案載入」行為,不要將它連接到任何項目。由於它沒有連接到其他行為,因此只要場景中出現這個按鈕,載入行為就會在場景開始時執行。如果您想根據特定事件或其他觸發條件載入,就可以將它連接到其他行為。
現在選取「從檔案載入」行為,以檢視其屬性。再次確認金鑰類型已選取「現有」。
接著,點選「選取金鑰」按鈕,開啟已儲存的金鑰清單。從清單中選取先前新增的「Score」金鑰。
此時,您已經載入分數,但還沒有使用它。接下來就讓我們使用載入的值。
在「使用者介面」類別中新增「設定標籤」行為,並將它連接到先前新增的「載入」行為。
接著選取「設定標籤」行為以檢視其屬性,並記得選擇剛新增、用來顯示載入分數的標籤。選好要變更的標籤後,將「從檔案載入」行為角落的輸出值拖曳到「設定標籤」行為的輸入欄位中。
這樣就完成了!下次遊玩時,您的進度就會儲存並載入到標籤中。
最高分
您可能已經注意到,每次按下按鈕時,分數都會被儲存,並覆寫先前的分數。有時這樣沒問題,但通常您只會想在玩家的分數高於先前紀錄時才儲存。
若要實作這個「最高分」系統,我們只需要稍微修改儲存邏輯。
先回到放置儲存行為的位置(「儲存」按鈕)。
首先,將「儲存至檔案」行為與「停止觸碰」行為取消連接。點選連接兩個行為的線,即可取消連接。
接著,在「邏輯」類別中新增 IF 行為。IF 行為會在執行前檢查特定條件是否成立。在此情況下,我們只想在分數高於先前載入的分數時才儲存。
將 IF 行為連接到「停止觸碰」行為。
接下來,點選 IF 行為以開啟行為屬性,並設定條件。
將「取得標籤」的輸出值拖曳到 IF 行為的第一個輸入欄位。
然後將「從檔案載入」行為的輸出值拖曳到 IF 行為的第二個輸入欄位。
現在需要變更條件。點選「等於」按鈕,然後選取「大於或等於」(≥) 選項。
最後,將原本的儲存行為連接到 IF。現在,只有當標籤上的值大於(或等於)載入的值時,IF 行為才會執行所連接的儲存行為。
這樣就完成了。現在您應該已經有一套可正常運作的儲存與載入系統,只有在玩家的分數超越先前紀錄時才會儲存分數。
儲存其他內容
本教學介紹了如何儲存分數。不過,有時您可能也想儲存其他內容,例如玩家的位置或目前關卡等。
本教學中學到的概念同樣適用。您只需要調整儲存的時機和內容。
以儲存玩家位置為例。物件的位置由兩個數字表示:X 和 Y。您只要使用兩個「儲存至檔案」行為即可,一個儲存 X 位置,另一個儲存 Y 位置。載入時則使用兩個「從檔案載入」行為。接著,您不需要設定標籤,只要將玩家物件移動到載入的 X 和 Y 位置即可。
只要規劃好要儲存的內容,以及何時需要儲存,就能建立一套幾乎適用於任何情況的系統。

