最近工作不是很忙,利用业余时间做了一个微信小游戏,目前正在申请软著登记阶段(mmp的天朝政策)。过程中做了一些笔记,在这里记录下来,当作一个小白的快速上手介绍,对已经有经验的不具备参考价值。我是使用Cocos Creator开发的,本文内容将分成两部分,一部分是对Cocos Creator做一个重要概念的介绍,另一部分是列出微信小游戏开发的一些注意点。
Cocos Creator
Cocos Creator是一个完整的游戏开发解决方案,包括了 cocos2d-x 引擎的 JavaScript 实现(不需要学习一个新的引擎),以及能让你更快速开发游戏所需要的各种图形界面工具。完全为引擎定制打造,包含从设计、开发、预览、调试到发布的整个工作流所需的全功能一体化编辑器。目前支持发布游戏到 Web、iOS、Android、各类”小游戏”、PC 客户端等平台,真正实现一次开发,全平台运行。
先下载一个Cocos Creator,再继续下面的内容。
资源管理器
资源管理器中存放图片、脚本、音频、场景(scene)等内容,场景对应的是一个canvas,每个场景有一个层级管理器管理场景下的节点,canvas是根节点。
层级管理器
层级管理器包含场景(canvas)中的每个节点,每个节点可以添加不同的组件,每个组件在属性检查器中有各自对应的属性设置。Cocos Creator就是通过组件的方式给节点添加功能的,如果直接把一个图片从资源管理器拖动到层级管理器,那么默认会创建一个带sprite组件的节点,Sprite(精灵)是 2D 游戏中最常见的显示图像的方式。
组件
- 组件通过挂载在节点上面给节点添加各种功能,例如碰撞组件给节点添加碰撞功能、刚体组件给节点添加力和速度等物理功能。
- 脚本组件是一个特殊的组件,你可以从资源管理器中选择某个脚本给节点添加脚本组件,脚本中要定义好一个Component类,在类方法中用this.node可以访问到对应的节点,从而对它做位移等操作。Component类有一个update方法,它会在每帧执行,一般会在这里改变节点位置渲染动画。
- 脚本组件中类定义的属性可以在属性检查器中编辑,属性的值可以是一个节点或者资源,你可以在层级管理器中把某个节点拖到属性检查器中脚本组件的某个属性,这样脚本里面可以直接访问到这个节点。属性也可以是某个节点的某个组件,这个取决于你在类定义里面指定了什么类型,例如指定了属性是cc.Label,那么把节点拖过去后,属性是节点的Label组件。
- 脚本组件中要访问其他的组件,需要通过节点的getComponent方法,用组件类作为参数访问到组件。例如要给一个刚体组件添加速度需要访问到刚体组件(设置速度后可以让节点运动),可以这样:this.node.getComponent(cc.RigidBody)。
碰撞系统
- Cocos Creator 内置了一个简单易用的碰撞检测系统,支持 圆形,矩形 以及 多边形 相互间的碰撞检测。这里只是检测,两个节点碰撞还是会重叠,并不会弹开。
- 只要为节点添加碰撞组件,启动碰撞检测,并且在碰撞组件对应节点的脚本组件中添加碰撞回调,改变两个节点位置到相互碰撞就可以触发回调函数,获取到碰撞信息。
- 碰撞组件可以进行分组,分组规定了哪些分组的碰撞组件之间可以产生碰撞。
物理系统
- 开启物理系统,设置重力,并且设置物理碰撞组件,节点会在场景中受重力改变位置,并且不同节点相互碰撞不会重叠(刚体),两个动态节点碰撞会相互影响速度,一个动态节点碰撞静态节点,则只有动态节点速度受影响。
- 这里节点的移动,可以是直接改变节点的坐标位置,也可以是在物理系统中改变节点的速度。
- 物理系统的碰撞检测触发的回调和单纯碰撞系统的回调函数是不一样的。
可能这么说还是有些抽象,可以结合官网的例子写一个小demo出来,这样大概就能掌握基础的用法了。
使用Cocos Creator可以方便的把游戏打包成微信小游戏,一款小游戏就这样完成了,但是微信小游戏有一些点需要注意。
微信小游戏
appid
- 测试不能用小程序类的appid,要用小游戏类的appid,官网提供一个固定的测试id可以用来测试:wx6ac3f5090a6b99c5
- 用上面的固定测试appid构建的游戏不能调用分享等微信接口
开放数据域
很多小游戏应该都要用到排行榜功能,这个通过开放数据域就可以实现,不用开发自己的后端服务。
微信小游戏为了保护其社交关系链数据,增加了开放数据域的概念,这是一个单独的游戏执行环境。开放数据域中的资源、引擎、程序,都和主游戏完全隔离,开发者只有在开放数据域中才能访问微信提供的 wx.getFriendCloudStorage() 等API获取用户数据,用于实现一些例如排行榜的功能。主域可以向开放数据域发送消息,反过来则不行。由于开放数据域只能在离屏画布sharedCanvas上渲染,因此需要我们把 sharedCanvas绘制到主域上。
由于开放数据域是一个封闭、独立的JavaScript作用域,所以开发者需要创建两个项目,主域项目工程是正常游戏项目,开放数据域项目工程通过微信API获取用户数据来做排行榜。
使用cocos creator时,在开放数据域项目工程中,独立通过开放数据域打包流程打包,放到主域代码目录下,就可以作为完整的微信工程在模拟器和真机上进行预览调试了。Cocos Creator提供了一个WXSubContextView组件,可以自动渲染sharedCanvas,具体操作可以查阅文档。
排行榜
排行榜是小游戏的一个重要功能,就是它促使用户有了去分享的动力,这里讲一下大概的实现思路,具体实现查阅微信文档:
- 好友排行榜
wx.setUserCloudStorage
保存用户分数,这里要注意遵循规范的格式,例如wxgame
字段里面除了score
和update_time
外不能有其他字段wx.getUserCloudStorage
获取当前用户分数,wx.getFriendCloudStorage
获取当前用户和好友数据,然后进行排名显示。这里要注意前端现在是拿不到appid的,所以要区分当前用户和好友用户,可以在设置用户分数的时候添加一些特别的字段,通过这些字段来区分。
- 群排行榜
- 保存分数和好友排行榜一致
- 获取群用户分数通过
wx.getGroupCloudStorage
获取,该方法需要一个额外的shareTicket参数,通过配置这个参数会在分享到群里的时候带上,用户在群里点击进入的时候就能够获取到
以上就是全部的内容,很多内容是从Cocos Creator文档上摘的,不得不说文档写得非常详细,这里附上链接。