作者lovesnake (LoyalDog)
看板GameDesign
標題[程式] OOP問題-引擎該放哪?
時間Thu Nov 7 12:37:10 2013
現在有兩個方向讓我駐足不已...
目前有物理引擎跟AI引擎
應該是
某生物體內有大腦跟脊椎推動他思考跟動作
還是
某生物是可動而且可思考的生物
一般引擎的實作會是哪一種呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.196.138
1F:→ KanoLoa:哪種便宜好做用哪種 11/07 13:11
2F:→ lovesnake:我現在想思考的是哪種模型的藕荷度最小跟可擴充性最大 11/07 13:22
3F:→ lovesnake:現在還是學生,只想做到最好。 11/07 13:22
4F:→ cowbaying:這兩種有何差別? 11/07 13:28
5F:→ cowbaying:AI要動一定要有參數 你的參數哪來的? 11/07 13:29
6F:推 cjcat2266:完全端看實際遊戲而定吧,沒有唯一解 11/07 13:56
7F:推 cjcat2266:或者就選一種設計,先試著做出一款遊戲 11/07 13:58
8F:→ cjcat2266:這是證明設計實不實用的最有效途徑 11/07 13:59
9F:推 LayerZ:完全不懂XD 這兩種有任何關聯性嗎 11/07 13:59
10F:→ cjcat2266:兩種差別應該就是 一般game AI v.s. NaturalMotion吧 11/07 14:00
11F:→ cjcat2266:後者超級難做好的,所以才有NaturalMotion這種專門公司 11/07 14:01
12F:→ cjcat2266:GTA4的酒醉步履蹣跚AI和人飛出車子的肢體AI就是使用 11/07 14:02
13F:→ cjcat2266:NaturalMotion做的physics-based AI middleware 11/07 14:02
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)
14F:推 Ebergies:絕對不要用第一種 11/07 16:40
15F:→ Ebergies:嗯... 好吧其實要看你想做啥 (廢話 """) 11/07 16:41
16F:→ azureblaze:分清楚「是一個」和「有一個」 11/07 16:45
17F:→ lovesnake:如果本文寫的,是一個跟有一個都是可行的。 11/07 16:47
18F:→ lovesnake:前者藕荷大,可擴充性低。 11/07 16:47
19F:→ lovesnake:不過想知道現在市面上的引擎都是用哪種 11/07 16:47
20F:推 cowbaying:其實我會比較想用第一種方法 用繼承的方式 11/07 17:49
21F:→ cowbaying:不過還是得看AI的架構怎麼寫才能去判斷要用哪種方法 11/07 17:50
22F:推 LayerZ:不要用第一種+1 11/07 19:01
23F:→ azureblaze:前者是OOP黎明期的誤用產物 現在原則上都用composition 11/07 19:14
24F:→ azureblaze:一些新的語言甚至根本不支援多重繼承 11/07 19:14
25F:推 cowbaying:了解 11/07 19:18
26F:→ siriusu:不好意思問一下 那interface呢? 11/07 19:22
27F:推 cowbaying:介面算是能達到多重繼承的效果 11/07 19:25
28F:→ cowbaying:如果以效率來說我會使用繼承 畢竟繼承也不是一無是處 11/07 19:26
29F:推 cowbaying:簡單來說如果不是自寫的東西就別用繼承了 11/07 19:27
30F:推 LayerZ:應該說,繼承的概念是,同類型物品的延伸定義 11/07 19:52
31F:→ LayerZ:個體->生物->有智商的生物這樣延續出來,但是全部都是個體 11/07 19:53
32F:→ LayerZ:狗跟狗的思考行為是不同概念的東西 11/07 19:54
33F:→ LayerZ:當然,在生物->有智商的生物時,可以加入AI,就是第二種 11/07 19:55
34F:→ LayerZ:這是我個人對繼承的理解啦 11/07 19:56
35F:推 cowbaying:現在問題在於AI跟物理引擎有無相同的方法、物件和變數 11/07 20:01
36F:→ cowbaying:還有相關文件建議的實作方式 11/07 20:02
37F:→ vamper:作法上很多種.只要基於SOLID設計就行了 11/07 22:14
38F:→ linotwo:一般來說不會把放在 instance of dog 裡的叫做 engine 11/08 05:51
39F:→ linotwo:而是把運算整個遊戲裡資料的系統叫做 engine 11/08 05:53
40F:→ linotwo:好比遊戲裡有 N 個 AI,那麼 engine 要做的是就是根據 11/08 05:55
41F:→ linotwo:事件或資料,逐一讓每個 AI 行動。 11/08 05:57
42F:推 Killercat:現在的主流都是少用繼承多用包含 11/08 08:49
43F:→ lovesnake:謝謝各位的回答~ 11/12 10:13