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

请输入看板名称,例如:iOS站内搜寻

TOP