unity 3消 游戲


3消游戲跟着智能手機流行到現在已經有很長一段時間,unity實現的3消 https://github.com/textcube/match3action

截圖如下:

在閱讀源碼的時候不難發現,GameSystem所負責的東西太過繁重,很多時候總是要很費力去分清哪些是對ui進行處理,哪些是進行數據處理,哪些又是在進行邏輯判斷。

源碼類圖如下:

 

要注意的是,Cell是引用類型。 MatchItem 里面所存放的cell,和GameSystem中所存放Cell[,]對應的cell項是指向同一內存地址的。修改其中一個會影響到另外一個。稍不注意便會引發錯誤。

於是盡管源碼條理清晰,命名規范,還是決定動手重構。

大致方向是抽象多一個數據操作層CellDataManager出來,進行數據初始化,檢測是否符合三消條件,數據交換等操作,供GameSystem。

 

關於分層,開發群里面有個“演員”的比喻可以跟大家分享一下:

“只把u3d的東西當作顯示對象來用的話,就沒必要太過糾結.
邏輯對象和顯示對象身份不混合,各干各的,相安無事.

比如說碰撞,有一種方法叫代理碰撞檢測,就是演員在這演着,在看不見的地方,只有幾個粗糙的布偶在做碰撞的交互,一旦有交互同步告知演員即可.
雖然各個問題都需要具體分析.不過能把各個問題清晰的分開,就不要混在一塊兒,混了之后妄圖通過什么設計模式來解決是行不通的.”

 

在3消游戲里面也是差不多的道理:

底層一個2唯數組存放着信息,在進行ui操作的時候調用對應的 數據操作api。判斷是否符合3消條件,符合返回消除項的id,進行對應的ui邏輯處理,不符合則進行其他ui處理。

 

重構后類圖如下:

 

重構后項目地址:https://coding.net/u/fatlin/p/Match3Game/git

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM