文档章节

游戏开发的两大超级法宝---协程和树状结构配置

liyong2
 liyong2
发布于 2016/01/22 00:29
字数 483
阅读 295
收藏 6

###最近遇到了几个复杂系统的设计,包括:

粒子系统

技能系统

剧情系统

AI系统

UI系统

场景系统

###发现这些复杂系统最终都采用了树状结构配置:

例如经典的 ogre 火炬之光的粒子系统;

rpg游戏的 技能系统,火炬之光,暗黑破坏神;

剧情系统,魔兽争霸3编辑器中的剧情;

AI行为树, 例如 Halo 光晕;

UI树状结构;

场景树,四叉树,八叉树,kdtree;

###树状结构系统的好处是:

业务逻辑互相之间解耦合;

系统容易扩展和修改;

系统模块之间互相访问的方式也是非常规范化;

这样设计的系统,非常优雅,欢迎大家和我多多交流关于 树状结构在游戏设计中的应用。

###而协程是 非常优雅的用于将异步业务逻辑线性化的机制, 通过结合协程和树状结构可以设计非常优雅的系统。

例如AI行为树:

行为树有重要的Action 节点用于执行一定的命令行为,而Action是需要一定时间来执行的,传统的做法是通过Tick 机制,即每帧率更新,但是 存在严重问题是每帧更新会导致 上下文丢失,每次执行都必须重新根据状态来跳转代码;

而协程序好处,即免去写状态机的麻烦,由编译器生成状态机,而程序员只需要设计,业务流程,以及执行等待即可。

虽然忙等待可能会有性能损失,但是带来的开发巨大便捷是非常有优势的, 同时即便需要热点性能优化,只需要手动将 协程改写为 状态机即可。

© 著作权归作者所有

liyong2

liyong2

粉丝 51
博文 196
码字总数 64732
作品 0
广州
程序员
私信 提问
xiaoyi445/Pebble

分布式开发框架Pebble使用说明 ##简介 Pebble是一个分布式开发框架。基于该框架,可以让开发者只需专注于业务逻辑的实现,而不需要关注基础功能的开发,如网络通信,数据存储,集群管理等。使...

xiaoyi445
2016/12/29
0
0
分布式开发框架--Pebble-RPC

Pebble是一个分布式开发框架。基于该框架,可以让开发者只需专注于业务逻辑的实现,而不需要关注基础功能的开发,如网络通信,数据存储,集群管理等。使用pebble配套的运营系统,可方便的进行...

匿名
2016/09/06
2.1K
0
OpenResty 最佳实践 (1)

此文已由作者汤晓静授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 OpenResty 发展起源 OpenResty(也称为 ngx_openresty)是一个全功能的 Web 应用服务器。它打包...

网易云
2018/10/31
0
0
分布式开发框架 - Pebble

Pebble定位为一个好用、可靠、高性能、易扩展的分布式开发框架,支持多种使用方式: 使用完整的pebble框架 独立使用各pebble子模块 在其他框架中嵌入pebble框架。 Pebble具备良好的扩展性,可...

匿名
09/16
395
0
游戏引擎Mojoc,(7)C使用goto label地址实现协程

C 语言实现协程,最困难的部分就是上下文信息的保存和还原。这样才能够做到,让协程在任意位置让出执行权限,稍后再恢复到中断位置继续执行。C 实现协程一般有几个方案。 使用第三方库来保存...

scottcgi
2017/10/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
26分钟前
3
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部