五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 本篇介绍有限状态机和行为树.有限状态机用于有限的状态下的AI,由于同时只能处于一个状态,多个状态需要多个有限状态机,一般用于简单的AI行为.行为树是基于固定行为,通过遍历树来决定采用哪种行为.行为的设计和执行采用解释器模式,由策划设计数据,程序解析执行,行为组合的灵活性高,比较适合剧情NPC.但当树比较深.分支比较多时,遍历的效率就需要考虑优化.一般我们认为有限状态机执行的性能优于行为树,但不能胜任复…
五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇将介绍在游戏客户端常用的架构MVC架构.一个游戏的MVC如下划分: M:1)单例全局的数据中心World,所有游戏模块的数据在World中有入口,2)各个模块自己的数据结构. V:1)通过creator预制体制作的UI界面.场景,2)各个界面显示逻辑的ViewCtrl C:1)全局的MainCtrl,2)各个模块的业务逻辑类ModuleCtrl 先介绍M部分.由于一个模块的数据,在其他模块也有访…
五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 我们在cocos creator新建一个Hello TypeScript项目,都会有一个assets/Scene/helloworld.fire文件.使用cocos creator开发游戏时,项目可以只有一个.fire文件.一般地,我会把这个文件夹改名为assets/scene,下面只有main.fire文件:assets/scene/main.fire. 双击main.fire文件,在层级管理器可以…
摘要: 五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇介绍A*寻路算法.在RPG.SLG.模拟经营类游戏,有需要给角色寻路的需求,一般寻路我们采用A*寻路算法,A*寻路算法是一种广度优先启发性算法. 先说说什么叫广度优先.搜索分为广度优先和深度优先,主要体现在对节点的展开上.深度优先一直往一个方向查找,如果没办法查找下去,在当前节点改变方向继续查找,直到找到终点.如果无法继续查找,就回退上一格重复操作.广度优先把当前节点放入待探索列表,循环…
五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 我们已经知道怎样制作.加载.显示界面.但cocos没有提供一个弹窗管理模块,对于一个多人合作的项目,没有统一的管理,界面层级容易混乱.作为主程,在项目开始就应该处理好这些问题,将弹窗划分为不同的层次,不同类型的信息显示在不同的层中.下面将讲解怎样设计弹窗堆栈. 一般地,从下向上,我会将弹窗划分为以下层: 1)内容层,展示游戏相关的信息界面. 2)tips层,显示提示性信息界面,例如获得物品的浮窗.网络…
五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇介绍日志系统的设计.一般我们开发一个demo,只会简单的用cocos提供的cc.log打印下日志,方便调试功能.但是要开发一个商业项目,还要考虑怎么收集日志,方便产品上线后定位线上问题.如果线上产品运行出异常时能把当时的上下文日志发到一个文件服务器,有利于分析异常的原因.例如如果有通信数据日志,可以先判断是后端返回数据异常,还是前端逻辑出问题.因此,我会在项目里设计一个统一的日志系统,游戏里所有…
五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 在初识篇,我介绍过怎样加载prefab.cocos提供了一系列的加载接口,包括cc.loader.load,cc.loader.loadRes,cc.loader.loadResArray,cc.loader.loadResDir. static load(resources: string|string[]|{uuid?: string, url?: string, type?: string},…
五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 前面已经介绍怎样加载资源.管理弹窗.开发一个网络游戏,难免要处理网络通信.有几点问题需要注意: 1.服务端为了快速开发可能前期使用http通信,后面再改成websocket/socket. 2.同时存在http和websocket/socket通信 3.通信数据格式可能需要随时替换为json或protocol buffer,可能需要添加额外头部. 4.在新手引导里使用本地数据做模拟,请求不需要发送给后…
五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇介绍瓦片地图,在开发模拟经营类游戏.SLG类游戏.RPG游戏,都会使用到瓦片地图.瓦片地图地面是通过一个个地砖拼起来的,又分为45度角和90度角两种.45度角俗称2.5D,每个格子都是菱形,而90度角每个格子都是正方形. 瓦片地图一般包括以下图层(不一定同时存在,例如一般RPG游戏没有背景和自由装饰层): 1.背景层(大图拼接的背景) 2.地形层(瓦片格子拼接的地形) 3.建筑层(按瓦片格子摆放…
五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇简单介绍下代码结构,清晰的代码结构更有利于团队对项目的理解和维护. 1.前面我们介绍了一系列基础功能封装,这部分内容可以被不同的游戏重用.这一部分代码都可以放到framework目录下. 2.游戏业务代码统一放到game目录下 3.平台sdk接入代码放到channel目录下 4.数据上报的sdk接入代码放到report目录下. StartCtrl是项目的入口,负责项目的初始化,包括渠道sdk.数…