[程式] OOP問題-引擎該放哪?

看板GameDesign (遊戲設計)作者 (LoyalDog)時間12年前 (2013/11/07 12:37), 編輯推噓12(12031)
留言43則, 11人參與, 最新討論串1/2 (看更多)
現在有兩個方向讓我駐足不已... 目前有物理引擎跟AI引擎 應該是 某生物體內有大腦跟脊椎推動他思考跟動作 還是 某生物是可動而且可思考的生物 一般引擎的實作會是哪一種呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.196.138

11/07 13:11, , 1F
哪種便宜好做用哪種
11/07 13:11, 1F

11/07 13:22, , 2F
我現在想思考的是哪種模型的藕荷度最小跟可擴充性最大
11/07 13:22, 2F

11/07 13:22, , 3F
現在還是學生,只想做到最好。
11/07 13:22, 3F

11/07 13:28, , 4F
這兩種有何差別?
11/07 13:28, 4F

11/07 13:29, , 5F
AI要動一定要有參數 你的參數哪來的?
11/07 13:29, 5F

11/07 13:56, , 6F
完全端看實際遊戲而定吧,沒有唯一解
11/07 13:56, 6F

11/07 13:58, , 7F
或者就選一種設計,先試著做出一款遊戲
11/07 13:58, 7F

11/07 13:59, , 8F
這是證明設計實不實用的最有效途徑
11/07 13:59, 8F

11/07 13:59, , 9F
完全不懂XD 這兩種有任何關聯性嗎
11/07 13:59, 9F

11/07 14:00, , 10F
兩種差別應該就是 一般game AI v.s. NaturalMotion吧
11/07 14:00, 10F

11/07 14:01, , 11F
後者超級難做好的,所以才有NaturalMotion這種專門公司
11/07 14:01, 11F

11/07 14:02, , 12F
GTA4的酒醉步履蹣跚AI和人飛出車子的肢體AI就是使用
11/07 14:02, 12F

11/07 14:02, , 13F
NaturalMotion做的physics-based AI middleware
11/07 14:02, 13F
OTZ... 其實我沒想這麼多,我只是在想是要用Combination的方式還是Inherit的方式把引擎 丟進我的物件裡面而已 OTZ class dog : virtual public wise, virtual public locomotion {}; or class dog { AI_Engine *someAI; Physics_Engine *someMotion; }; 一般做引擎會用哪種方式? 目前傾向於後者。不過要寫很多Adaptor有點麻煩。 ※ 編輯: lovesnake 來自: 140.121.196.138 (11/07 16:34)

11/07 16:40, , 14F
絕對不要用第一種
11/07 16:40, 14F

11/07 16:41, , 15F
嗯... 好吧其實要看你想做啥 (廢話 """)
11/07 16:41, 15F

11/07 16:45, , 16F
分清楚「是一個」和「有一個」
11/07 16:45, 16F

11/07 16:47, , 17F
如果本文寫的,是一個跟有一個都是可行的。
11/07 16:47, 17F

11/07 16:47, , 18F
前者藕荷大,可擴充性低。
11/07 16:47, 18F

11/07 16:47, , 19F
不過想知道現在市面上的引擎都是用哪種
11/07 16:47, 19F

11/07 17:49, , 20F
其實我會比較想用第一種方法 用繼承的方式
11/07 17:49, 20F

11/07 17:50, , 21F
不過還是得看AI的架構怎麼寫才能去判斷要用哪種方法
11/07 17:50, 21F

11/07 19:01, , 22F
不要用第一種+1
11/07 19:01, 22F

11/07 19:14, , 23F
前者是OOP黎明期的誤用產物 現在原則上都用composition
11/07 19:14, 23F

11/07 19:14, , 24F
一些新的語言甚至根本不支援多重繼承
11/07 19:14, 24F

11/07 19:18, , 25F
了解
11/07 19:18, 25F

11/07 19:22, , 26F
不好意思問一下 那interface呢?
11/07 19:22, 26F

11/07 19:25, , 27F
介面算是能達到多重繼承的效果
11/07 19:25, 27F

11/07 19:26, , 28F
如果以效率來說我會使用繼承 畢竟繼承也不是一無是處
11/07 19:26, 28F

11/07 19:27, , 29F
簡單來說如果不是自寫的東西就別用繼承了
11/07 19:27, 29F

11/07 19:52, , 30F
應該說,繼承的概念是,同類型物品的延伸定義
11/07 19:52, 30F

11/07 19:53, , 31F
個體->生物->有智商的生物這樣延續出來,但是全部都是個體
11/07 19:53, 31F

11/07 19:54, , 32F
狗跟狗的思考行為是不同概念的東西
11/07 19:54, 32F

11/07 19:55, , 33F
當然,在生物->有智商的生物時,可以加入AI,就是第二種
11/07 19:55, 33F

11/07 19:56, , 34F
這是我個人對繼承的理解啦
11/07 19:56, 34F

11/07 20:01, , 35F
現在問題在於AI跟物理引擎有無相同的方法、物件和變數
11/07 20:01, 35F

11/07 20:02, , 36F
還有相關文件建議的實作方式
11/07 20:02, 36F

11/07 22:14, , 37F
作法上很多種.只要基於SOLID設計就行了
11/07 22:14, 37F

11/08 05:51, , 38F
一般來說不會把放在 instance of dog 裡的叫做 engine
11/08 05:51, 38F

11/08 05:53, , 39F
而是把運算整個遊戲裡資料的系統叫做 engine
11/08 05:53, 39F

11/08 05:55, , 40F
好比遊戲裡有 N 個 AI,那麼 engine 要做的是就是根據
11/08 05:55, 40F

11/08 05:57, , 41F
事件或資料,逐一讓每個 AI 行動。
11/08 05:57, 41F

11/08 08:49, , 42F
現在的主流都是少用繼承多用包含
11/08 08:49, 42F

11/12 10:13, , 43F
謝謝各位的回答~
11/12 10:13, 43F
文章代碼(AID): #1IUnZvIu (GameDesign)
討論串 (同標題文章)
文章代碼(AID): #1IUnZvIu (GameDesign)