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