推 kingroy: 要做的話應該幫每一格都寫一個通用的script,有四個bool07/10 23:15
→ kingroy: 保存他的四個方向的狀態,另外一個bool去保存水是不是有07/10 23:15
→ kingroy: 流過來的狀態,旋轉時則把四個方向的bool跟著旋轉。07/10 23:15
→ kingroy: 有否連通就檢查每個move後四周的格子跟對應方位的狀態就07/10 23:17
→ kingroy: 好07/10 23:17
→ kingroy: 比起用array,把每一個格子需要有的特性寫成script比較好07/10 23:19
→ kingroy: ,另外做一段gamemanager的script去管理你全部的物件07/10 23:19
推 cjcat2266: 推樓上,這種定義明確的系統自己寫結構,清楚又有效率07/11 03:33
→ cjcat2266: 用碰撞偵測是引入不必要的複雜性07/11 03:34
→ dreamnook: 同 這不需要用碰撞去檢查 他只是單純的flag07/11 09:41
謝謝各位回覆,我有點不太懂,我回去畫圖思考一下,大概的概念是不用用碰撞器去偵測,
改用25個block的腳本設四個旋轉的state,再用一個主script去算這25個block的對應關係
嗎~還有四種形狀的水管要用四種不同的寫法
我在思考變成流通狀態先後順序的問題,但是每幀很快,是不是主script需要有一個延遲時
間延遲給他算@@
我再想一下怎麼寫 謝謝各位回覆~
※ 編輯: Neverfor (180.217.193.219), 07/11/2018 13:49:31
推 kingroy: 檢查狀態不要給update去做,雖然update很方便但25格每格07/11 14:52
→ kingroy: 一次負擔也不小,每次旋轉後觸發event叫gamemanager去檢07/11 14:52
→ kingroy: 查就好 07/11 14:52
推 cjcat2266: 先把資料模型設計好吧,不要管互動、旋轉、視覺等花邊 07/11 15:38
→ cjcat2266: 先想想寫程式的話,資料要用什麼方式呈現 07/11 15:38
→ cjcat2266: 例如使用代表方塊類型和方向的struct的5x5矩陣 07/11 15:38
→ cjcat2266: 要怎麼從一端出發,看看能不能走到另外一端(DFS? BFS?) 07/11 15:38
→ cjcat2266: 如果連這個基本問題都不能解決,那成品就做不出來 07/11 15:38
→ cjcat2266: 更正,DFS & BFS不只可看是否能連通,也可找出所有接觸 07/11 15:39
@@ 小弟是EE背景的 我下個學期才要修DS跟演算 如果我現在鑽研這個會看不懂嗎QQ 有修
過C 基本C的pointer跟struct 記憶體位址概念都還OK
現在暑假比較有空慢慢鑽研
推 cjcat2266: 從視覺化編輯器設計下手,要注意別忽略基本資料模型設07/11 23:39
→ cjcat2266: 計的重要性07/11 23:39
推 cjcat2266: 等基本資料和邏輯都建設完善,再想視覺呈現和互動的包07/11 23:41
→ cjcat2266: 裝,會比較順利07/11 23:41
推 cjcat2266: 啊,我現在可以看出之前說的”基本問題”用詞上可能會07/11 23:43
→ cjcat2266: 被解讀為我斥此問題為”過於簡單”,請別誤會,我的意07/11 23:43
→ cjcat2266: 思是這個資料模型是埋藏於整個系統下的”基礎建設”07/11 23:43
謝謝 大概瞭解C大你的意思了 我現在學Unity比較偏向看到什麼問題 再去學什麼 不知道這
樣好不好呢 現在會的都是基礎那些舉凡碰撞器 觸發 腳本一些物件互動 之前在練習都是2.
3個物件互動為多 現在碰到要一次處理多個物件比較不知道怎麼辦
※ 編輯: Neverfor (180.217.193.219), 07/12/2018 04:03:10
※ 編輯: Neverfor (180.217.193.219), 07/12/2018 04:06:59
推 cjcat2266: 會用到的東西,不用等學校開始教,直接去找教學資源 07/12 05:47
→ cjcat2266: 鑽研,比較快也比較深入,學校也只是帶入門而已 07/12 05:48
→ cjcat2266: 這已經是個比一般學校教材還要實際的應用題了 07/12 05:49
→ cjcat2266: 解出來的話,經驗會比印出作業要求的printf有意義多了 07/12 05:50
推 cjcat2266: 這不用什麼特別的資料結構,就是單純的5x5 struct陣列 07/12 05:59
→ cjcat2266: 演算法可去研究BFS和DFS(breadth-/depth-first search) 07/12 06:00
→ cjcat2266: 從起點開始,可以找出所有碰到的節點 07/12 06:00
好 我今天嘗試了一下用結構表示
大概如下 :
https://i.imgur.com/lHbzSd9.png
![](https://cache.ptt.cc/c/https/i.imgur.com/lHbzSd9l.png?e=1718791482&s=rs4r8MYc0jEn3PN_Yk3WKQ)
![](https://cache.ptt.cc/c/https/i.imgur.com/S01paK5l.png?e=1718757541&s=jjXcni2g8xonG8s8Z37PHA)
→ Neverfor: 話說要怎麼宣告5*5的結構啊XDD 07/13 00:54
→ Neverfor: 只看到這種寫法public block[,] = new block[5,] ; 07/13 00:55
→ Neverfor: C#的array跟 C C++差真多 07/13 00:56
推 cjcat2266: 還好吧,只是語言上些微差異,陣列底層的意義是一樣的 07/13 01:25
→ cjcat2266: C#和C/C++比較重要的差別之一是managed v.s. unmanaged 07/13 01:25
→ cjcat2266: 你在C#不需要管的事情,C/C++不能忘記管 07/13 01:26
→ cjcat2266: 那個旋轉角度邏輯雖然說看起來沒什麼問題,不過我不會 07/13 01:26
→ cjcat2266: 像你那樣用float比較個10度範圍,感覺起來不嚴謹 07/13 01:27
→ cjcat2266: 既然只有四種離散旋轉角度,我會直接用int存90度倍數 07/13 01:27
→ cjcat2266: 為了檢查float是否為某個單一特定值,卻用範圍比較 07/13 01:33
→ cjcat2266: 總是讓我毛毛的。萬一以後不只能以90度作改變,還要重 07/13 01:34
→ cjcat2266: 新審視float精準度問題,感覺是不必要的負擔 07/13 01:34
→ Neverfor: 在面板上他顯示90.000 -90.000 我寫==90抓不到 我改用範 07/13 02:10
→ Neverfor: 圍就可以了QQ 他是寫90.0000001這樣 07/13 02:11
→ Neverfor: 謝謝C大用心回覆:) 來慢慢研究怎麼讓水通了 07/13 02:13
推 cjcat2266: 那就是float精準度誤差造成的啊,徑度角度轉一轉就會 07/13 02:29
→ cjcat2266: 有這種問題出現,比較float範圍不是不行,但是這邊邏輯 07/13 02:30
→ cjcat2266: 上是明確的離散角度值,那就該用離散值(int,enum,etc.) 07/13 02:31
→ cjcat2266: 存,邏輯才清楚 07/13 02:31