在上一篇中我們建立了combo陣列,同時也標記了要消除的珠子,接下來要實際做珠子消除、落下和生成,下面是分階段顯示這次的目標。
上圖動作做完後,再回到分群組的步驟直到沒combo為止,就可以得到以下結果。
可以生成一個無combo的初始化盤面,這就是本篇的目標。
首先是PuzzleSystem腳本的新增變數和程式碼修改。
using UnityEngine; using System.Collections.Generic; public class PuzzleSystem : MonoBehaviour { . . . public bool hasRemove = false;////(1) void Start() { InitGrid(); do {////(2) hasRemove = false; OrbCreate(); OrbGroup(); OrbCombo(); OrbRemove(); } while (hasRemove); } void InitGrid() { . . . for (int r = 0; r < rowCount; r++) { for (int c = 0; c < columnCount; c++) { . . . //orb data init Orb orb = orbObj.GetComponent<Orb>(); orb.type = Orb.OrbsType.Null;////(3) . . . } } . . . } void OrbCreate() { foreach (Orb orb in orbs)////(4) { orb.group = false;////(5) orb.removed = false;////(6) if (orb.type == Orb.OrbsType.Null)////(7) { int typeNum = Random.Range(0, (int)Orb.OrbsType.Null); orb.type = (Orb.OrbsType)typeNum; } } } . . . void OrbRemove() {...}////(8) }(1)新增布林變數hasRemove,用來判斷是否要重複執行找群組、combo等等動作。
(2)將Start中呼叫的函式丟到do while迴圈中,除了盤面初始化以外,依序為珠子屬性生成、找群組、找Combo、珠子消除與落下。
(3)修正在InitGrid中呼叫OrbCreate的地方,改成帶入Null屬性。
(4)對orbs執行foreach迴圈。
(5)初始化group變數。
(6)初始化removed變數。
(7)當珠子屬性為Null時,賦予新的屬性。
(8)宣告OrbRemove函式用來處理珠子消除與落下。
接著是OrbRemove函式的內容。
void OrbRemove() { foreach (Orb orb in orbs)////(1) { if (orb.removed == true) { orb.type = Orb.OrbsType.Null;////(2) hasRemove = true;////(3) orb.removeText.text = "";////(4) } orb.groupNum.text = "";////(5) } foreach (Orb orb in orbs)////(6) { if (orb.type == Orb.OrbsType.Null)////(7) { for (int index = orbs.IndexOf(orb); index <= columnCount * (rowCount - 1) + orb.column; index += columnCount)////(8) { if (orbs[index].type != Orb.OrbsType.Null)////(9) { orb.type = orbs[index].type;////(10) orbs[index].type = Orb.OrbsType.Null;////(11) break;////(12) } } } } }(1)針對每一個珠子重設屬性。
(2)當找到珠子為需要被移除的狀態,把珠子的屬性修改為Null。
(3)同時將hasRemove設為true,這時Start中的while迴圈就會再次執行。
(4)重設珠子群組的text,text元件與程式碼在整個流程確定沒問題後就可以刪除。
(5)同(4)。
(6)針對每一個珠子做掉落判定。
(7)當找到屬性為Null時。
(8)往珠子的上方搜尋。
(9)當找到非Null屬性的珠子時。
(10)把當前珠子屬性設定為該珠子的屬性。
(11)將該珠子設定為Null屬性。
(12)設定完屬性就代表該珠子掉落完成,結束往上搜尋的迴圈。
以上就是珠子消除、落下和生成的說明,之後或許會有程式碼修改,但邏輯上應該是不會變的,到這裡初始化盤面就算完成了,接下來是轉珠的部分。
這次就到這裡。
想問如何加入消除的聲音
回覆刪除