前一段時間,自己想做一個行為樹編輯器,給策划用來編輯ai 和 事件。由於本人是做linux C++的,很久沒碰過圖形界面編程了,實在是為難了一陣子,最后一狠心,重新用起大學學的那一些C#知識,自己一點點摸索,做了一個初級的東西出來,自我感覺良好,奉獻出源代碼
所用的技術是C# + WPF + PRISM 采用MVVM開發,其中的難點可能就是增刪節點,自動生成一棵最美的樹了。什么是最美樹呢?它有個學術上的名字叫reingold-tilford,具體我也說不上來,看下圖:
圖一
圖二
圖二第4行比圖一增加了一個節點,整棵樹會自動調整布局,節點與節點之間間隙均勻,我認為這是一棵最美樹。
整個算法實現代碼不多,100多行。大家可以google一下reingold-tiford,可以找到很多相關算法的論文,可惜沒有找到一個具體實現,所以我在此共享一下這份代碼
算法大致描述如下:
1.前序遍歷所有節點計算每個節點初始值Prelim和修正值Modify
a.如果是葉子節點直接計算出來即可
b.如果是非葉子節點需要調整已該節點為根節點的子樹的間隙,防止重疊
2.再次遍歷所有節點根據Prelim和Modify值計算的最終位置
代碼:
https://github.com/egametang/Egametang/blob/master/CSharp/
需要裝nuget,再裝好依賴的庫