GameDesign 板


LINE

今天工作不爽. 就來談一下資料驅動設計(Data-driven Design)好了. 我現在的專案的介面模組就是DDD. 有優點.這點我不會故意忽視. 透過資料檔的更動.程式的結果就不同了.我想這是當初設計者使用DDD的原因. 然而,一直看不順眼的原因我卻一直到今天才明瞭.就是程式寫太爛嘛. 設計概念好,實作爛 -就如同洋房的磚塊是用沙堆黏起來般-又脆弱又難改, 一戳就破,一改就一連扯下一堆爛木版. 為了避免有人不知道Data-driven是什麼, 我還是要稍微說明一下,順便連帶帶出我要比較的各種軟體架構模型. # Data-driven design 資料驅動設計. 系統本身不負責運作,系統本身只負責執行各項由資料端定義而來的反應. 資料端可能是一個xml的檔案.定義配置,屬性,以及各項事件. 比如說一個按鈕按下的時候播放一個聲音. 資料端就會這樣定義這個按鈕的位置,顏色,然後搭配按下的時候要執行的內容. <Button id...>  <Press>   <PlaySound file=.../>  </Press> </Button> 程式碼可能像這樣 ButtonPressed() { // trigger_button switch( trigger_button->Action[j] ) ... case ePlaySound : PlaySound( ... ) ; } 當然有好處的不然不會這麼多人推這個做法. 第一個好處就是當我想改變這個按鈕的行為的時候我就改xml. 改完再去執行程式,結果當然就不一樣了. 要拿掉,新增,改變屬性,改變行為都可以由編寫xml的人員去獨立進行. 這樣的設計方式通常會有一小撮精英把底層架好(Engine). 然後由Artist來部署大量的xml. 第二個好處就是xml的可讀性不錯,編寫xml的工人不難教育. 缺點我們等下在一起講 # hard coded 透過程式碼實現邏輯 相反地,把邏輯用程式碼實現就叫硬摳.它正好就是DDD所解決的問題. 因為硬寫.所以要改的時候要重新編譯,再測試,再改再編譯.也難怪會有人發明DDD. 程式碼可能就像這樣 ButtonPressed() { // trigger_button { PlaySound( ... ) ; } } # script 透過腳本 第三種變形,會使用腳本的原因在DDD我們沒有提及. 也就是xml不相容於我們的程式語言(以這裡的例子就是c++),當然嘛它就是個"資料". 但是正因為不相容,我們必須寫中繼的程式, 以xml來說就是 xml parser ,把資料存入執行中的程式裡面調用. xml的規則越複雜, parser就越複雜,廢工. 而同時複雜等於容易出錯. 所以才有透過腳本的方式來替代(或是部份替代)xml. 腳本語言裡面一樣可以撰寫配置,屬性,事件. 相對於寫parser,腳本語言的作法依然要寫橋接的"介面". 但好處是因為腳本是程式語言,多半可與執行的程式語言有共通之處. (譬如說可以使用同一組資料結構來傳遞資訊) 這樣就可以少寫了parse的部份. 腳本語言就會變這樣 Script_Button_i_Pressed()  Script_PlaySound(...) End 專案程式這裡就是 ButtonPressed() { // trigger_button { run_script( "Script_Button_i_Pressed" ) } } # 其他組合型 譬如說flash + c++ 由flash負責介面,然後c++負責觸發與hard code其他的功能 ButtonPressed() { // trigger_button { flash_component->run( "ButtonPressed" ) ; PlaySound( ... ) } } 這種組合跟hard coded很像,但是又有橋接的部份, 以flash來說他也有action script,但是又不像一般腳本語言這樣能夠橋接到多功能, 所以說這樣的寫法跟腳本的作法又有雷同之處. 這邊的flash模組就是一筆可活動封裝良好的"資料",由flash engineer來製作. 若以象限圖來看可以把這四種作法切成這樣 Combine | DDD ----------|-------- Hard-Coded| Script 右方是修改的彈性良好 上方是資料端封裝良好 最後要說明比較的部份,可能比較多人會跟我看法不同 . DDD: 就如同我開場所述,如果底層"功能"明確,製作完成後就不大改變,那麼就容易大量配置. 但是若底層撰寫不良,或是功能陸續增加,就會慢慢發生混亂. 因為在陸續增加功能的情形下, 有可能是xml寫錯,有可能是parser寫錯,也有可能是新增的功能項寫錯. 增加的部份很廣泛導致如果不嚴格控管,容易變成blob般肥大, 模組內部的運作全部混在一起,邏輯混亂. 而DDD的缺點也就會浮現出來, 運作的邏輯不顯而易見, 新人(不是最初架構引擎的人)難以維護. 而xml的parse也都為人所詬病,若只parse一次, 改了資料後程式還是要重開,但又不能每個畫格都去parse,會浪費很多效能. 這更考驗xml的安排切割與最佳化. . hard coded 其實我對hard coded的看法沒有這麼糟糕. 在技術強度不高的團隊中,它也並非是一個不可行的辦法. 若在 "大架構上有良好的區隔" 的前提下 hard coded顯而易見的第一優點就是模組清楚.哪裡出錯就是哪裡的問題.責任相對清楚. 當我們要重構的時候最怕有一半正確,一半錯誤的模組, hard coded的優點正來自他的缺點,整個模組抽掉就對了. . script script是不錯的進階選擇, 可以與程式共用一些模組,可以少寫一些程式, 缺點就是腳本語言管理,除錯不方便, 要橋接的良好還是需要一點技術能量, 若要自己創script就需要更高一層的技術力. . 組合型 越是封裝越好的模組就就是除錯不易. 但是封裝的好,也代表污染不會蔓延. 優劣並立. -- "May the Balance be with U"(願平衡與你同在) 視窗介面遊戲設計教學,討論,分享。歡迎來信。 視窗程式設計(Windows CLR Form)遊戲架構設計(Game Application Framework) 遊戲工具設計(Game App. Tool Design ) 電腦圖學架構及研究(Computer Graphics) --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.164.51.135 ※ 編輯: NDark 來自: 1.164.51.135 (09/05 20:40) ※ 編輯: NDark 來自: 1.164.51.135 (09/05 20:40)
1F:推 osanaosana:推...原來我曾經實作過DDD 09/05 21:40
2F:→ VVll:剛寫完這東西 在ios上吃json的client 09/05 21:44
3F:推 GALINE:對*玩家*來說 Data Driven 還有 moddable 的好處 09/05 21:45
4F:→ GALINE:寫死的話玩家只能改改貼圖讓女角裸體,完全 data driven 09/05 21:47
5F:→ GALINE:奇怪的遊戲了 09/05 21:47
6F:→ NDark:然而,moddable的前提在於第一版的好玩. 09/05 23:16
7F:→ NDark:至少要吸引到第一批志願者,才有後續的mod出現. 09/05 23:16
8F:→ NDark:如果在還沒確定第一版就好玩的情形下就執著擴充性, 09/05 23:17
9F:→ NDark:風險是很大的. 09/05 23:17
10F:推 damody:快來寫 lua 可惜不原生支援 unicode 09/05 23:18
11F:推 asoedarren:js漸漸變成script的主流 09/05 23:26
12F:推 lf21201:感覺很酷! 請問有沒有關於DDD的實作範例@_@ 09/06 00:23
13F:推 Bencrie:Data Driven 的話想推 1997 的 Total Annihilation 09/06 09:20
14F:→ Bencrie:到現在還有人在做 mod,花樣比原作還豐富 XD 09/06 09:21







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP