先上半成品demo
說明:
紅色的是怪物,玩家是比較大顆的綠色球球,可以召喚小綠球(近戰)、藍球(遠程),召喚需要扣HP,召喚物死掉後變食物(灰色大便條),吃掉可以回血。(怪物會去可以吃)
地板上的紫線別管它,懶得弄QQ
程式構想等等介紹,先看看新舊差別:
現在改成特定interface
滑鼠單擊選取看不太出差別,但畫面框選就差滿多的。
舊的:
新的:
程式碼變長主要是專案需求,多了些變化,但主要概念還是164~170行
以下簡單介紹程式構想:因滑鼠操作有分 左鍵(選取友方)、右鍵(選取攻擊目標),因此可被左鍵選取的Selectable為真、可被右鍵選取的Targetable為真。兩者不衝突。
最近接觸interface的心得是:
同目標的工作,但做法都不同 => 用介面 (interface)
作法大同小異,唯參數要調整 => 用類別 (class)
介面是將處理所需的資料與處理做法分離,讓處理泛型腳本的類別或某個功能的Manager可以專心在整體的邏輯。
這裡負責管理這些介面的Manager是"ScreenObjPicker"類別。
一開始先產生自己的instance。
HashSet 結構《HashSet<T>類別提供高效能設定作業。 集合是不包含重複專案,且其元素沒有特定順序的集合?!?
微軟文件), 跟List的差別可以參考看看
這篇。
這裡27、28行的Hashset變數用來管理場上繼承該介面的物件,物件生成時註冊進來,這樣就不用每次選取時都抓一次。
在檢視器長這樣
第43-58行指定Manager的HashSet,別的腳本若需要存取該資料,則可透過介面的Container或TargetableList變數去存取,而不是直接指定Manager的資料,這樣以後改了個Manager或換其他資料來源,只要改介面的變數即可。
有趣的是,若兩個介面的變數名稱相同,則實作時只需寫一個就好。
其他都是些基本滑鼠操作,加了些event讓其他腳本接收訊息這樣。
畫出框與範圍選取:
157行被註解掉是因為執行foreach時修改到陣列長度會造成"Collection was modified; enumeration operation may not execute" error,所以158行後面加個ToList()會複製一個集合。
雜談:
我討厭這個專案= = 害我壓力山大,逃避了一大堆時間,有點不太想做,但又怕損老師面子。
需求只說有主角A(玩家)、主角B(電腦),他們在小房間裡面追逐打架,想自己加什麼都行,就是盡量不要增加美術工作量,然後先試試看LOL的操作方式。 聽美術說專業的建模要花1、2月做一隻角色,不過都要走卡通風了,只能抱著半信半疑的態度。
這玩法怎麼想都覺得好玩不起來,也許是我還沒想到有什麼變化? 覺得還是
第一個版本比較好玩。請問各位有什麼想法?
但說到底因為個人情緒影響到程式品質感覺很慚愧...... (後面能動就好沒甚麼想管了= =)