- 博客(37)
- 资源 (16)
- 收藏
- 关注
原创 游戏开发入门——CocosCreator实现
其实市面上已经有很多关于游戏开发的课程了,而且都各有千秋。但是。目前市面上的编程课很多标榜的零基础,但是很多名词都没有做相应的解释。我觉得对于初学者来说,可能还是有些难度。课程和课程之间没有一个循序渐进的关系。学员无法通过学习课程形成自己的思想体系。通过讲解小球的运动,可以让初学者初步认识CocosCreator,TypeScript语言、运动学、坐标系,分辨率等知识。对继续深入学习游戏开发有非常大的帮助。重在入门,形成编程思想,达到一通百通的目的。
2023-09-10 09:13:42 502
原创 带纵深可跳跃横版闯关游戏模版
battle: 战斗相关代码db:存档数据管理energy:体力equip:装备explore:探索界面相关hero:英雄item:游戏中所有道具统筹管理器loading:加载管理login:登录mission:任务prop:道具(未使用)public:公共功能resource:游戏中的资源role:游戏中的角色server:服务器访问(未使用)shop:商店user:用户数据模型初始化类BaseCompoenent:组件基类。
2023-07-02 15:02:31 271
原创 游戏开发中的各种角色浅析
在以往的游戏开发中,我们往往需要处理很多角色,围绕着这些角色的组织形式,解耦等话题,出现了很多复合设计模式。例如:pureMVC,MVVM ,MVC 等等。对于这些设计模式,都是有利有弊,有他自己的使用场景。不过我们要透过表象看本质,就需要抛开这些设计模式,分析游戏中的各种角色,以及他们的相互作用关系。才能最终找到一种属于自己的使用模式。一 数据1. 数据的分类数据是游戏中不可或缺的部分,比如单机游戏的本地存档数据,网络游戏从服务器获取的远程存档数据,这两种统称为存档数据;再有就是配置表数据,常量
2022-04-29 15:44:58 2197
原创 CocosCreator 穿山甲+GoogleAdmob接入流程
creator2.4.2Android studio 4.0.1穿山甲官方文档穿山甲sdkV3.3.0.3Admob官方文档接入Google 大家都知道,是需要科学上网的。以穿山甲为例对于Android游戏来说,平台的启动部分需要在应用程序的onCreate中完成,所以还是需要在java端做一些设置的。依次导入sarsgame 和 平台相关的依赖项目sarsgame 是公共依赖,如果是穿山甲就导入chuanshanjia,如果是google admob 就导入googleadmob
2021-03-29 14:06:43 21000 1
原创 游戏开发之资源加载管理器
前言在我的框架中一直没有提供加载相关的内容。因为我觉得资源管理器的接口都已经提供了,而资源怎么加载是一件相对比较灵活的事情,所以一直没有提供与加载相关的内容。但是后来居然不止一个人问我如何加载资源?于是我将自己的使用方式简单讲解一下。如果有什么不对的地方,还望大家留言指教。注意事项加载的资源是由哪个Bundle提供的?加载的资源的类型是什么?不同类型的资源加载后是否有特殊的操作?同步加载还是异步加载?有些资源加载失败了会如何处理?资源加载的顺序是怎样的问题解析对于第一个问题,我们必
2021-03-18 14:44:25 314
原创 横板闯关游戏中的角色移动
前言在很多2D游戏中,都会涉及到角色移动,跳跃等操作,最典型的就是横板闯关游戏。例如经典的魂斗罗、三国战纪等。这两款游戏在地图移动和角色行走的方式中唯一的不同就是魂斗罗是没有纵深的那种。看似简单,其实涉及了地图,摄像机移动,数学和物理的一些内容。本片内容先介绍一下移动组件的定义,稍后的文章会一点点讲解地图、自定义摄像机等,最终应用到游戏中,做成一个完整的demo。坐标系首先不得不说的一点,所有的移动都是依托坐标系的。我们这里的坐标系是以左下角为原点,横向向右为x正方向,纵向向上为y正方向,朝向
2021-01-08 07:49:50 452 1
原创 游戏开发中的红点提示
前言当我们的游戏开发进度接近尾声的时候,不仅要做教学引导的事情,还有一件对于中大型游戏来说非常重要的事情就是红点提示。它有别于教学引导,但也是引导的作用,指引性更明确,而且不会影响UI外观和体验的流畅。开始通过配置两张数据表来记录红点提示的相关数据。 提示信息表,仅表明都有哪些提示类型。每个红点提示使用的界面及控件名称。第二列为属于哪个提示,所以声明为索引类型。比如1来说,就是由GridLayerListViewTest的buttonBack和ItemView的bg两个按钮组成,也就是当有
2020-08-21 11:50:17 973
原创 小游戏云开发入门
前言百度:https://q.qq.com/wiki/cloud/base/intro.htmlQQ:https://q.qq.com/wiki/cloud/base/intro.htmlWX:https://developers.weixin.qq.com/minigame/dev/wxcloud/basis/getting-started.html当下云开发比较火,不过本人并不是很感冒,因为他的好处显而易见,但缺点也是致命的。好处就是1. 不用自己买服务器,域名认证,不用担心服务器过期;
2020-08-09 19:00:25 728
原创 代码生成器插件与Creator预制体文件解析
前言之前写过一篇自动生成脚本的工具,但是我给它起名叫半自动代码生成器。之所以称之为半自动,因为我觉得全自动代码生成器应该做到两点:代码生成+自动绑定。之前的工具只做了代码生成,并没有做自动绑定,所以鄙人又花时间研究了CocosCreator的预制体文件,实现了自动绑定的能力,并且支持了插件使用方式。本篇内容,不仅仅是宣传自己的插件工具,还会帮助大家分析一下Creator的预制体文件格式,使购买插件的同学可以将插件价值最大化,也能让读者对Creator的预制体文件有所了解。Creator 预制体
2020-08-07 13:00:51 1014 1
原创 代码生成+自动绑定工具
功能介绍根据预制体文件生成脚本自定义输入目录和输出目录自动绑定属性+数组使用V标识变量使用V标识变量使用V标识变量使用A标识数组属性名称默认带有类型。自动绑定button事件可扩展导出属性类型自动绑定其他预制体的属性,和button事件8.自动导入使用到的其他脚本...
2020-08-06 23:29:51 256
原创 游戏开发中的新手引导与事件管理系统
前言在游戏开发接近尾声的时候,大部分的游戏都会接入新手引导功能,提升玩家的游戏体验,不至于让玩家进入游戏有冷场或者不知所措的感觉。对于新手引导的做法估计一百个人有一百种方式,接下来我将分享一下自己的使用方式,并伴随一些问题的讨论。教学引导1. 使用简单的遮罩聚焦。这种方式可以转移玩家的注意力,毕竟进入游戏的时候内容有很多,但是人的接受能力有限。可以根据配置表设置决定是否有遮罩2. 将引导放到最上层,屏蔽触摸事件这种方式比较省事,也避免了玩家乱点导致的引导错误。但是我们可以通过配置表的方式,
2020-08-05 21:52:19 1088
原创 跨引擎游戏框架说明文档
文章比较分散,不易查找,故而有此篇。如需购买,请通过公众号——我的服务——源码出售进入。目录整体分为与引擎无关的cfw目录和与平台相关的engine目录。cfwanim: 自定义序列帧动画属性管理器:多用于战斗中英雄和敌人的各种属性管理。audio 音频管理器:包括音乐,音效collide:四叉树碰撞,已做优化。教程:https://mp.weixin.qq.com/s/Xpf6qgZPSJ2cynNR7-iMYAevent:独立于引擎的事件管理器。事件代理,全
2020-08-02 10:32:55 2795 2
原创 手写脚本代码太累!搞一个生成工具吧
前言在游戏开发中,我们的开发流程一般是制作预制体或者场景创建脚本、声明属性拖拽节点设置属性编写逻辑我开发了款半自动代码生成器工具主要是解决第2步的问题;之所以称之为半自动,因为我觉得全自动代码生成器应该做到两点:代码生成(第2步)+自动绑定(第3步)。自动绑定需要改动预制体文件,由于所有人的使用方式不尽相同,出现的问题会比较多,我喜欢相对灵活,约束比较少的方式,所以我采用了拖拽设置和代码设置相结合的方式解决自动绑定的问题。功能介绍导出与预制体同名的类文件声明属性如果属性是无效
2020-07-31 23:23:13 823 1
原创 游戏开发中的多语言处理
前言之前我写过一遍《数据表的使用》的文章,今天继续用文本处理为例讲解一下数据表导出工具的使用和多语言的使用方式。编写数据表我们先定义一个UI文本表,写好表头,添加几个测试用对本文,注意类型使用lang。使用工具导出打开build.bat文件,修改数据表和项目路径,双击运行,这时候如果不出问题你的项目下就会出现对应的数据和枚举文件为了减少配置数据的大小,所有数据才用数组形式,所以生成了枚举文件,使用枚举索引对应的数值。使用数据添加数据到数据管理器,如果不是合并的表需要给一个key,我
2020-07-31 12:00:58 610
原创 游戏开发性能优化之对象池
为什么要使用对象池对象池优化是游戏开发中非常重要的优化方式,也是影响游戏性能的重要因素之一。在游戏中有许多对象在不停的创建与移除,比如角色攻击子弹、特效的创建与移除,NPC的被消灭与刷新等,在创建过程中非常消耗性能,特别是数量多的情况下。对象池技术能很好解决以上问题,在对象移除消失的时候回收到对象池,需要新对象的时候直接从对象池中取出使用。优点是减少了实例化对象时的开销,且能让对象反复使用,减少了新内存分配与垃圾回收器运行的机会。Cocos官方文档说明的使用方式https://docs.coco
2020-07-31 10:17:36 939
原创 Creator2.4.0如何发布头条小游戏
前言在这里,我遇到的问题是:游戏包超过4m,并且小于等于8M,不需要远程资源服务器,使用分包即可。Creator推出了2.4版本,使得全平台都有了分包管理的能力,其实这句话我说的不够严谨,对于头条来说,这个AssetBundle就有些尴尬了。如果将bundle放入resource目录下打包微信小游戏报错因为我们发布头条小游戏基本都是通过微信小游戏修改后上线,但是头条小游戏是不支持分包加载的,只能把资源都放到resource下,这岂不是尴尬了吗?我想到的方案打包头条小游戏的时候还是需要先打微信包,
2020-07-25 17:28:58 865
原创 CocosCreator之分层管理的ListView
前言进入公众号回复listview即可获得demo的git地址。之前写的一篇文章《Creator之ScrollView那些事》中提到了官方Demo中提供的ListViewCtl,只是实现了纵向滑动,没有实现横向滑动。并且建议官方可以把功能做全然后放入组件库中供开发者使用。然后有个牛逼大神说这个ListView不ok。要我对自己的公众号内容负责。我还以为有什么严重的bug,其实是打断了合批操作。对于官方提供的ListViewCtr的操作方式肯定会打断合批的 !不过对于一些简单的需求,比如我上次文章中
2020-07-16 22:06:48 975
原创 CocosCreator之AssetBundle使用方案分享
前言Creator2.4 推出了AssetBundle,使得所有平台都有了分包的能力。那么该如何使用这个强大的功能呢?下面介绍一下我个人的用法,仅供参考,水平有限,非喜勿喷。根据官方文档 指出,之前的cc.loader 需要用cc.resource替换而cc.resource 本身就是一个Bundle也就是说,2.4之前,整个引擎只有一个cc.loader 管理资源,2.4之后采用了多个Bundle来管理资源,只是cc.resource这个Bundle负责管理resource目录下的动态资源,已
2020-07-15 12:19:02 5551 3
原创 游戏开发中的道具管理
前言在开发游戏的时候,我们肯定会处理道具,不论是多大的游戏都有道具。道具的管理方式也是多种多样。下面记录一下我个人在游戏开发中的道具管理方式。道具的定义道具的属性基本分为:ID、类型、数量、图标、名称、等重要信息,还有描述、激活状态、购买此道具的消耗道具等其他信息。不过在配置和传递数据时最重要的属性还是ID,类型和数量这3个。ID:也就是道具的唯一标识类型:用于区分道具所在的数据表道具的数量: 可以是拥有的数量,也可以是需要的数量。不论在配置数据的时候还是在传递数据的时候,都需要填写
2020-07-08 13:58:55 823
原创 一个可屏蔽长短链接的网络模块
前言游戏开发中最复杂的模块,没有之一。其实我也不想写这篇文章,怎奈框架代码卖出去了,得给我的用户一个交代。网络模块都需要实现哪些功能呢?按我以往的开发经验总结如下:消息的正常发送与接收长链接的断线重连消息发送失败与尝试长链接的心跳处理适应各种服务器定义的协议格式适应各种数据传输格式屏蔽长短链接的差异长链接支持发送协议号与接收协议号不同的情况。让短链接也可以像长链接一样更新数据。有必要屏蔽长短链接吗?这个看需求吧有没有开发过程中将长链接改成短链接的情况呢?你客户端
2020-07-08 13:57:15 585
原创 Creator填色游戏的一种实现方案
前言先上一个辛苦弄出来的gif效果。写公众号时间不长,很多技巧还在慢慢跟小伙伴学习。可关注公众号,回复“绘图”或者“填色”都可获得demo的git地址。请使用Creator2.4.0运行填色游戏种类也挺多的,我今天要说的是一种相对简单的填色。对于填色游戏的做法,我在论坛里搜到不少帖子,尤其是这个帖子的留言比较多:油漆桶填色效果怎么实现啊,找了两天都找不到资源其中有一条留言跟我的想法不谋而合,尤其是做了之前的取色,绘图等功能后,对webgl的readPixels()函数返回的数据处理起来越来越顺
2020-07-08 13:39:48 2817 1
原创 一个可屏蔽长短链接的网络模块
前言游戏开发中最复杂的模块,没有之一。其实我也不想写这篇文章,怎奈框架代码卖出去了,得给我的用户一个交代。网络模块都需要实现哪些功能呢?按我以往的开发经验总结如下:消息的正常发送与接收长链接的断线重连消息发送失败与尝试长链接的心跳处理适应各种服务器定义的协议格式适应各种数据传输格式屏蔽长短链接的差异长链接支持发送协议号与接收协议号不同的情况。让短链接也可以像长链接一样更新数据。有必要屏蔽长短链接吗?这个看需求吧有没有开发过程中将长链接改成短链接的情况呢?你客户端
2020-07-04 00:13:41 299
原创 游戏开发中的人工智能
前言今天非常开心,观看cocos官方直播居然在几千人中中奖,可以买彩票了。言归正传,所谓的人工智能,也就是大家常说的AI(Artificial Intelligence)。一说到AI可能就会让人觉得比较深奥,其实也就是非玩家角色思考和行为的综合。比如,在什么样的条件下,触发什么样的行为。其实我们在游戏开发中的AI要比学术理论中的AI简单很多,甚至有些行为不需要AI也能体现。比如使用剧情对话体现非玩家角色的想法。那么AI 都涉及到哪些东西呢?控制器我理解的控制器,就是非玩家角色的大脑,是用来思考
2020-07-01 23:06:37 1347
原创 游戏开发中的道具管理
前言在开发游戏的时候,我们肯定会处理道具,不论是多大的游戏都有道具。道具的管理方式也是多种多样。下面记录一下我个人在游戏开发中的道具管理方式。道具的定义道具的属性基本分为:ID、类型、数量、图标、名称、等重要信息,还有描述、激活状态、购买此道具的消耗道具等其他信息。不过在配置和传递数据时最重要的属性还是ID,类型和数量这3个。ID:也就是道具的唯一标识类型:用于区分道具所在的数据表道具的数量: 可以是拥有的数量,也可以是需要的数量。不论在配置数据的时候还是在传递数据的时候,都需要填写
2020-07-01 00:06:39 919
原创 如何判断一个点在旋转后的矩形中
前言最近在做的一款游戏中,用到点与旋转矩形的判定来获得一个选中的物体。在此做个记录如图所示,黄色的颜料屏是旋转的,如果不做处理直接判断点是否在矩形中,那么点击红点的位置会判定为选中物体。显然这是不对的。如果物体没有旋转,判断方法就很简单了。 static isPositionInRect(point: cc.Vec2, rect: cc.Rect) { return point.x <= rect.x + rect.width/2 && point.x
2020-06-28 20:01:54 2421 1
原创 用Creator实现一个擀面的效果
先上几张效果图怎么实现的呢?节点介绍1是背景图,可以忽略;2 是准备好的面团;3 是擀好的面饼先隐藏;4 是需要绘制的节点;5 是擀面杖。制作开始首先在view上挂一个mask,并且设置为模板模式,sprite frame 就设置成那张擀好的面饼。这样的设置可以使Mask按照擀好面饼的形状遮罩内容。在walpaper-layer 节点上挂在了一个我写好的有关于绘制图形的脚本文件,并设置好相关参数。这个脚本主要做的就是使用Graphics绘制图形。在graphics节点上挂上Gr
2020-06-27 21:25:13 613
原创 游戏开发中的多语言处理
前言之前我写过一遍《数据表的使用》的文章,今天继续用文本处理为例讲解一下数据表导出工具的使用和多语言的使用方式。编写数据表我们先定义一个UI文本表,写好表头,添加几个测试用对本文,注意类型使用lang。使用工具导出打开build.bat文件,修改数据表和项目路径,双击运行,这时候如果不出问题你的项目下就会出现对应的数据和枚举文件为了减少配置数据的大小,所有数据才用数组形式,所以生成了枚举文件,使用枚举索引对应的数值。使用数据添加数据到数据管理器,如果不是合并的表需要给一个key,我
2020-06-19 22:29:30 1186
原创 使用四叉树优化碰撞检测
四叉树是干什么的?百度百科四元树又称四叉树是一种树状数据结构,在每一个节点上会有四个子区块。四元树常应用于二维空间数据的分析与分类。 它将数据区分成为四个象限。数据范围可以是方形或矩形或其他任意形状。从定义我们可以看出重点信息:树状结构四个区块分类矩形图示讲解讲解之前需要先说明一下四叉树是用来做什么的,明白了原理才好理解它的行为。使用四叉树就是使用分类的方法,减少碰撞节点的个数,只取出与给定碰撞体相同区域或者压在碰撞体所在区域边上的对象。将游戏屏幕分为四个区域。插入对象
2020-06-18 12:26:56 3953 1
原创 协议生成器工具
前言何为协议生成器?其实就是前后端同学在对协议的时候使用的工具,手动添加对应的内容,最后一键发布自己需要的任何与协议有关的内容。有人会说,我直接写proto文件用它的命令行也可以生成很多文件的。不过proto本身的能力,我工具都可以使用,因为本身工具就可以调用proto。下面开始介绍一下这款附带源码的工具良心价格,买来不一定要用,但是你可以拿来学习这种思想;用什么语言开并不重要,重要的还是思想;编程编的就是思想,就跟写文章一样。介绍文件功能定义服务可能我门一款游戏用到好几个服务,比如登陆
2020-06-16 19:18:50 3224
原创 游戏开发之目录划分
目录划分为一下几种先按资源类型,再按模块划分即从类型到模块。好处就是当你需要翻阅资源的时候先从类型着手。然后再定位到功能模块。高内聚低耦合的策略,有利于团队协作。先按资源类型划分:最外层的目录也就是代码,动态资源,静态纹理,场景文件所以主要的划分还是在动态资源目录里边,比如分为声音文件,配置文件,纹理,预制体文件,粒子效果,动画文件等。然后就是对纹理文件的划分了,主要是存放的也就是动态加载的资源,比如道具图标等,因为拼界面的纹理一般会放到静态纹理目录下,所以动态纹理只需要按纹理用途划分就可以
2020-06-08 19:16:25 1327
原创 在小游戏开发中如何优雅的使用本地存档
说明h5提供了LocalStorage本地存储能力,但是如果直接使用不是很方便。所以我封装了以下几种类型,达到与其他类型几乎相同的使用方式。BaseStorage: 存储类的基类。LocalValue :数值类型,存储float,int,string等LocalList :列表类型相当于数组LocalMap :key-value类型。StorageHelper: 用于调用各个引擎提供的LocalStorage类。使用各种形式的加密算法,对数据进行读写。类图关键代码import Sto
2020-06-07 11:15:56 810
原创 游戏开发之UI管理器(跨引擎)
使用UI管理器的目的使用单场景与zindex结合的方式管理UI。能够隐藏底层UI达到优化效果。很好的组织和管理UI。跨引擎使用。管理器分类根据以往经验我开发了三种类型的管理器,队列管理器,栈式管理器,单UI管理器。单UI管理器:SingleManager负责管理如登录,loading,大厅,游戏这样的一级UI,同一时刻只有一个UI实例存在。UI之间是替换关系。栈式管理器:StackManager用于管理先进后出的UI,弹出功能UI使用。队列管理器:QueueManager用于管理先进
2020-06-07 11:05:37 1080
原创 小游戏开发之资源管理(跨引擎)
前言资源管理是内存优化的一部分,对于大型游戏,资源管理不明确,很容易出现内存不足而闪退的情况。说到资源也就涉及到了资源划分,这部分内容可以看另一篇文章《游戏开发之目录划分》。#资源管理器需要考虑的情况加载完成的回调加载失败后的尝试多个相同请求的处理。未加载成功之前已经删除。资源的使用情况,记数。跨引擎使用。各个引擎需要提供的辅助类需要实现的接口/** * 自定义的资源分类,对应各个引擎中相同的资源。 */export enum ResType { Texture2D,
2020-06-05 22:24:38 599
原创 游戏开发优化篇之合并图集
对于性能来说,很多情况都是用空间换时间。然后在尽量减少空间的占用,在两者之间做抉择。首先我们了解一下性能指标帧率:每秒游戏循环执行的次数,即每秒多少帧 越高越好drawcall: 一帧中游戏调用gpu绘制图形次数,越少越好3 . cpu性能: cpu执行速度,越快越好4 . gpu性能: gpu执行速度,越快越好5 . 内存: 游戏资源占用的运行时空间, 越低越好6 . 网络请求数: 请求网络下载资源,越少越好7 . 加载速度: 将硬盘中的
2020-06-05 21:19:58 1188
原创 在小游戏开发中如何优雅的使用本地存档
说明h5提供了LocalStorage本地存储能力,但是如果直接使用不是很方便。所以我封装了以下几种类型,达到与其他类型几乎相同的使用方式。BaseStorage: 存储类的基类。 LocalValue :数值类型,存储float,int,string等 LocalList :列表类型相当于数组 LocalMap :key-value类型。 StorageHelper: 用于调用各...
2020-04-16 00:26:09 820
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人