GameDesign 板


LINE

※ 引述《NDark (溺於黑暗)》之銘言: : 實務面是, : 在遊戲層的各個元件(不管是繪圖,移動,動畫)都要能取得目前FPS的資訊, : 或是當此元件的機制需要這個資訊的時候,必須要從最外層一路傳進去。 最近在做一些基底類別,有一個地方還沒決定. 可以拿出來跟各位討論一下.不知道有沒有我想不周到的地方. 問題如下 遊戲中的物件(Object,或Entity元件)散落在遊戲中的各個角落. 不管用什麼方式把它們串起來,都會有執行的Process. 而這些流程可能就會用到FPS的資訊. 或是這個流程想要知道 "距離上次執行.經過了多少時間?" 目前我這裡考量的有幾種作法,先列出來給各位參考. A. FPS一路傳入式 每個畫格.每個Process都一定要跑到. 然後強迫傳入此畫格經過多少時間(Elapsed Time). 因此實作上就是所有物件基底的類別會有這個成員函式, 所有繼承的類別物件都強迫實作它.如下: virtual GameObject::Main( double _ElapsedTimeSec ) ; 優點: 一條鞭式,撰寫簡單. 缺點: 所有物件都被無可避免的強迫串上一個管理器, 所有物件也被強迫一定要用這樣的方式撰寫.比較沒有彈性. 對於那些物件之中的小物件,或是不希望每個畫格都執行到的流程. 就必須要特別考量兩次執行到底累積了多久時間. B. 獨立的計時器 考量到每個物件不一定每個畫格都要跑到,某些物件譬如說log記錄器,每1秒才跑一次. 每個Process有自己的計時器.跑起來的時候自動會計算與上次差了多久. 實作方式就是有一個Timer物件,會去參照系統時間. AnyObj.MyProcess() { ElapsedTimeSec = TimerObj.getElapsedSec() ; TimerObj.Restart() ; ... 優點: 每個物件只要自己去取得過了多久就好.不用串上統一的管理器.作法彈性. 也不用每個畫格都執行. 缺點: 因為是取得系統時間來計算跟上次差了多久. 所以遊戲沒辦法控制這個時間差. C. 註冊FPS通知器 A與B的混合型.每個會用到FPS的物件. 都去跟一個唯一(singleton)的FPS管理器來註冊自己. 因此這個管理器就就像是有一堆鬧鐘. 每個畫格就對這些鬧鐘累加一次. 每個物件不定時間執行的時候.就去取得自己的鬧鐘.取得經過時間.然後重置鬧鐘. 實作如下 AnyObj::AnyObj() { TimerHandleID = singletonFPSManager().RegisterTimer( this ) ; ... AnyObj.Run() { ElapsedTime = singletonFPSManager().getElapsedTime( TimerHandleID ) ; singletonFPSManager().resetTimer( TimerHandleID ) ; ... 優點: 物件不用串上管理器.作法彈性. 缺點: 物件必須記得要去註冊自己.取得handle id.且保證這個id不會重複. D. 獨立的裝飾型計時器 B的變化型.在取得系統時間前.再包裝一層放大器. 這樣就可以讓遊戲管理器自由調整給每個物件的時間經過 裝飾型計時器實作如下 class DecorateTimer : public SysTimer { double AmplifyValue = ... 優點: 物件改跟裝飾型計時器要資料. 不用串上管理器.作法彈性. 還可以依照不同的物件類型取得放大或原始的經過時間 缺點: 使用時要記得現在是用裝飾過後的Timer. 使用上必須明瞭自己在取得的時間是什麼意義. 以及.要避免有程式設計員不知道有這個裝飾計時器. 還傻傻的跑去拿系統時間.以至於物件之間不同步的情況. -- "May the Balance be with U"(願平衡與你同在) 視窗介面遊戲設計教學,討論,分享。歡迎來信。 視窗程式設計(Windows CLR Form)遊戲架構設計(Game Application Framework) 遊戲工具設計(Game App. Tool Design ) 電腦圖學架構及研究(Computer Graphics) --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.167.132.126 ※ 編輯: NDark 來自: 118.167.132.126 (11/06 18:39)







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燈, 水草

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

TOP