热天中文网

第14章 手动重构引擎(第4页)

天才一秒记住【热天中文网】地址:https://www.rtzw.net

至少对第一个demo来说,够用了。

写到buff类时,又遇到问题。

2028年的buff系统支持多层叠加、持续时间刷新、效果合併、优先级判断。

但2002年不能这么搞。

他再次简化:buff不能叠加,同类型后到的覆盖先到的。

持续时间用帧数计算,每帧检测是否到期。

效果只有属性修正(加攻、加防、加减速)和状態附加(定身、沉默)。

他写了一个上午。

到中午时,头文件写完了,大概三百行。

这只是骨架,但结构清晰,职责分明。

“阿坤,来看一下。”

林浩说。

阿坤走过来,站在他身后,看屏幕。

他看得很慢,很仔细,有时会停下来,想几秒,然后继续。

“这个battlefield类,”

阿坤指著一行代码,“用二维数组存储单元引用,查找效率是o(1),但內存开销大。

如果地图大,会爆內存。”

“地图不会大。”

林浩说,“第一个demo,战场就100x100格,每个格存一个指针,4位元组,总共40kb,可以接受。”

“那单元移动时的碰撞检测呢?还是遍歷所有单元?”

“用空间分区。

把战场分成10x10的区块,每个单元只和同区块及相邻区块的单元检测碰撞。

算法你熟。”

阿坤点头:“四叉树或者网格。

我推荐网格,简单,2002年够用。”

“行,那你来实现。”

阿坤回到自己电脑前,开始写空间分区算法。

林浩继续写源文件。

下午,他遇到了第一个大难题:事件驱动框架。

2028年的游戏引擎,事件系统是核心。

玩家操作、技能释放、伤害触发、状態变化,全都是事件。

事件队列、事件监听、事件派发,一套完整的发布-订阅模式。

但在2002年,c++没有lambda,没有函数对象,没有標准库里的function。

要实现事件系统,得用函数指针,或者自己造轮子。

林浩选择了最土但最可靠的办法:用整数类型標识事件,用switch-case分发。

每个事件有一个结构体,包含事件类型和一堆union栏位。

监听者註册回调函数,事件发生时,遍歷所有监听者,调用对应的函数。

他写了两个小时,写出了事件系统的雏形。

测试时,发现性能有问题:每次事件派发都要遍歷所有监听者,如果监听者多,会成为瓶颈。

“用哈希表。”

本章未完,请点击下一章继续阅读!若浏览器显示没有新章节了,请尝试点击右上角↗️或右下角↘️的菜单,退出阅读模式即可,谢谢!

如遇章节错误,请点击报错(无需登陆)

新书推荐

特种兵之利刃余罪我能穿进语文书神话复苏从齐天大圣开始重生年代:空间致富小辣妻斗罗之神位掌管者左苏从寒门开始崛起我被一只猫饲养了混在妖尾的魔导商人神医魔后绝品神医混都市秩序官[快穿]游戏从稻草人开始真千金有读心术[九零]快看那个大佬重生八零前程似锦修真强少在校园我在末世有个鱼塘[娱乐圈]姐妹,搞桃浦吗穿进游戏后我狂暴升级抢救大明朝御道倾天天降龙凤萌宝:保姆妈咪别想跑大国名厨