微信小游戏从了解到游戏发布的全流程技术介绍!

2019-05-10 10:02:09 浏览数 (1)

微信小游戏推出后,LayaAir引擎也同步支持了微信小游戏的开发,由于很多开发者对微信小游戏的开发流程不够了解,不太清楚如何下手。为此,我们在2018年的开工首日,从简介篇,小游戏创建篇,综合介绍篇三部分,全面介绍微信小游戏的开发、测试,与重要项目规则。

简 介 篇
首先,我们要了解什么是微信小游戏?

腾讯官方的解释是:

微信小游戏是微信小程序的一个类目,它即点即玩,无需下载安装,体验轻便,可以和微信内的好友一起玩,比如PK、围观等。

即点即玩,无需下载安装。这应该就是H5游戏了吧?

怎么解释呢?这要先从H5的定义说起……

通常大家都认为H5就是HTML5的简称,但是在开发者的眼里,HTML5只是一个WEB技术标准,符合这个标准的,并且能在浏览器里运行的游戏才是HTML5游戏。而更多的人,对技术了解不多。为了便于理解,把即点即玩,无需下载安装的游戏都称之为H5游戏,还有人叫手机页游。

微信小游戏的运行环境并不是浏览器,也不能在浏览器中运行,而是运行于微信APP中的Runtime。尽管微信小游戏的接口兼容大部分Canvas和Webgl,具有即点即玩,无需下载安装的HTML5特性。显然,从严格的定义来讲,微信小游戏不是标准的HTML5游戏。

那么,如何能做到开发的游戏还能在浏览器中也运行起来呢?开发者只能使用微信小游戏的开放API开发吗?

带着这两个问题,我们继续介绍。

众所周知,LayaAir引擎是基于HTML5的全平台引擎,既然是全平台,那当然不能错过微信小游戏啦!

所以,在微信小游戏发布的当天,LayaAir引擎也为开发者推出微信小游戏的适配库。自LayaAir 1.7.14版开始,开发者下载最新版本引擎或IDE,只需要按照适配教程文档,初始化一下适配程序,即可将HTML5游戏项目无缝适配为微信小游戏项目。

这样,通过LayaAir引擎开发出来的项目,不仅可以运行在浏览器中、或者打包成为APP(iOS与Android)、还可以运行在微信小游戏的平台中。

或许,开发者还想了解,既然微信小游戏不是HTML5,那在开发的过程中需要注意哪些差异呢?

如果是采用微信官方API开发的话,还是要有一些要注意的,比如不支持DOM与BOM、小游戏只能有一个画布、不支持Eval、不支持XML等等……

但是,

对于LayaAir引擎的开发者来讲,不用刻意去了解到底有哪些差异,按照正常的LayaAir引擎开发规则去开发就可以了。即便是已经采用LayaAir引擎开发完成的老项目,替换最新版本引擎类库后,在主程序入口的Laya.init()之前,调用MiniAdpter.init()这个方法,去初始化一下适配程序,把预加载的本地包内容放入到layaNativeDir目录,即可完美支持微信小游戏。

AS3版本初始化

代码语言:javascript复制
//AS3版本初始化微信小游戏的适配
  MiniAdpter.init();
  //初始化引擎
  Laya.init(1136,640);

TypeScript或JavaScript版本初始化:

代码语言:javascript复制
//TS或JS版本初始化微信小游戏的适配
Laya.MiniAdpter.init();
//初始化引擎
Laya.init(1136,640);
小游戏创建篇

一、准备好开发环境

1、下载并安装LayaAirIDE集成开发环境

LayaAirIDE是LayaAir引擎的集成开发环境,集成了LayaAir引擎与示例项目,UI、动画等可视化编辑,项目代码编写与管理等开发工具。开发者可以直接采用LayaAirIDE创建微信小游戏的示例项目。

官网下载地址 :http://ldc.layabox.com/layadownload/?type=layaairide

Tips:LayaAirIDE 1.7.14版本才开始集成微信小游戏开发

2、下载并安装微信小游戏开发工具

微信小游戏开发工具是小游戏开发与测试的环境,由于LayaAir引擎的开发者完全可以使用LayaAirIDE进行项目开发,那么安装这个小游戏开发工具主要是用于小游戏项目编译、预览、真机测试与调试、上传发布等。

在小游戏开发文档的首页里,通过导航链接前往开发者工具下载页面 ,去下载开发工具。

开发工具下载地址: https://mp.weixin.qq.com/debug/wxagame/dev/devtools/download.html 3、创建一个小程序开发者帐号,获得开发者ID(AppID)

尽管没有AppID也可以开发调试,但是功能会受到限制。所以在开发之前,最好先去创建一个小程序开发者帐号。

注册地址:https://mp.weixin.qq.com/cgi-bin/registermidpage?action=index&lang=zh_CN

二、创建微信小游戏项目

1、用LayaAirIDE创建小游戏示例项目

打开LayaAirIDE,新建项目。选择”微信小游戏示例“,设置项目名称、项目路径、开发语言类型、引擎版本。就可以创建小游戏项目了,如下图所示。

Tips:本示例暂以ActionScript3开发语言为例,后面会讲一下TS和JS项目与AS3项目的区别。

2、查看示例项目效果

创建完项目之后,我们可以直接点一下调试按钮(如下图所示)。就可以看到我们的示例什么样子。

Tips:这一步除了编译js,主要为了让大家记住我们的示例什么样子,后面,如果小游戏效果也是这样的就没错了。

3、简单了解项目的发布目录。

LayaAir开发者应该了解,项目目录/bin下级的h5目录才是运行目录。LayaAirIDE已经自动在示例项目内创建了小游戏的适配程序,所以这个目录下的内容直接复制到小游戏的项目目录下(项目超过4M要特别处理,后面细讲)。

特别提醒

当TS与JS目录下多个js文件时,没有合并可能会导致报错,AS项目编译器已做了合并处理。如果是TS或JS项目,1.7.14 beta版本只能先采用第三方的JS合并工具(比如webPack)将JS合并,然后再复制到小游戏的项目目录运行。LayaAirIDE计划1.7.14正式版本开始集成微信小游戏自动合并发布的功能。在LayaAirIDE中实现任何语言版本都可以一键发布为小游戏项目的目标。

三、创建小游戏项目

1、开发者帐号登录,选择项目类型

打开”微信web开发者工具“,用开发者的微信扫码登录。然后选择小程序项目点击进入项目设置。

2、设置小程序项目

在小程序项目设置面板里,为了快速体验小游戏项目,我们暂时将项目目录设置在LayaAirIDE创建的小游戏示例项目的运行目录。(正式开发,要另外创建一个发布目录,避免运行目录的资源超过4M被小游戏拒绝上传)

AppID在小程序开发者帐号里获得(如下图所示)。如果没有,可以点击小AppID输入框下的小游戏进行体验,但是功能会受到限制。

3、微信开发者工具的编译与调试

完成小游戏项目的创建后,点击编译,即可在工具内预览效果和调试,AS3项目的话,由于JS在编译时自动合并了,所以到这一步应该非常顺利,可以看到模式器中的效果与LayaAirIDE中的调试效果是一致的。

如果是TS或JS版本。如果不手动修改一定会报错。我们可以在调试器里看到报错信息,这块的调试就是chrome的调试方式,所以就不细讲了。

报错的原因基本上是由两个问题导致。

第一、TS与JS版本目前还没有集成小游戏的JS合并功能,所以多个JS文件会因为跨文件的执行域问题报错。

第二、同样是由于LayaAirIDE暂时还没有集成JS合并,所以小游戏的入口程序game.js里,引擎并未自动引入游戏的入口文件。所以不手动修改,肯定是找不到入口文件的。

解决方案

第一、要使用第三方JS合并工具,将多个JS合并成为一个JS。然后修改入口程序game.js,将合并后的js引入即可。

修改后的game.js参考:

代码语言:javascript复制
require("./weapp-adapter.js");
require("./main.min.js");

第二、如果引擎JS不想合并到一起,也是可以的,只把项目JS合并到一起就行了。但是要在入口程序里将多个引擎JS引用进来。

修改后的game.js参考:

代码语言:javascript复制
require("./weapp-adapter.js");
require("./libs/min/laya.core.min.js");
require("./libs/min/laya.wxmini.min.js");
require("./libs/min/laya.webgl.min.js");
require("./libs/min/laya.ui.min.js");
require("./main.min.js");

第三、有没有不合并的解决方式呢,也是可以的,因为JS文件的声明如果不是全局的,在其他JS环境下无法找到定义,那么,我们将变量的声明改成全局变量,那就可以解决了。比如,我们的小游戏示例程序,通过调试器可以看出是找不到TestPageUI,那么我们在layaUI.max.all.js找到TestPageUI将其变为window.TestPageUI(如下图所示),然后再修改入口程序game.js,引用所有的JS就可以了。

修改后的game.js参考:

代码语言:javascript复制
require("./weapp-adapter.js");
require("./libs/min/laya.core.min.js");
require("./libs/min/laya.wxmini.min.js");
require("./libs/min/laya.webgl.min.js");
require("./libs/min/laya.ui.min.js");
require("./js/ui/layaUI.max.all.js");
require("./main.min.js");

需要提醒的,如果项目比较大,那改的地方就会比较多。至少在当前,并不推荐这种方式,因为IDE每次发布和更新项目时,又会被覆盖掉。建议采用JS合并的方式,将多个项目JS合并成为一个JS。

4、真机测试与调试

除非是一些新手遇到的小游戏的兼容问题,由于LayaAirIDE里也可以调试项目效果,基本上两边的效果不会有不一致的情况。所以这里最重要的是点击预览功能,通过手机微信扫码,在微信内进行真机测试与调试。

用微信扫码后,就启动了小程序项目,点击右上角的浮窗按钮,可以打开调试和打开性能监控面板。

开启真机调试与性能监控面板后,如下图所示。

至此,一个完整的小游戏开发流程就结束了。是不是很简单。采用LayaAirIDE开发的小游戏项目,基本上是无缝用于微信小游戏项目。

综合介绍篇

一、LayaAirIDE中的小游戏目录结构介绍

1、资源目录规划

res目录内是资源目录,LayaAirIDE里的res目录下是游戏项目中用到的资源。

这里重点提一下,微信小游戏允许每个游戏有4M本地物理容量,用于游戏前期加载,超过4M的小游戏项目是拒绝上传的。所以,一旦你的整个项目(资源和JS的总和)超过4M,就要从外网加载资源。 截图上的目录结构是IDE生成和创建的,少了一个layaNativeDir(后续版本应该会补上)。这里要重点说明一下,LayaAir引擎在底层对4M本地包目录进行了处理,当使用引擎的加载方法Laya.loader.load()加载资源时,layaNativeDir目录下的内容会直接从本地使用,其它目录下才会从网络动态加载。所以,我们需要手动创建一个layaNativeDir目录,用于存放小游戏4M包内的资源。 需要提醒开发者的是,开发测试时,如果要使用外网动态资源,需要勾选不校验安全域名(如下图所示)。

因为4M的限制。所以,游戏项目内,开发者需要规划好哪些是需要前期加载上传的内容,哪些是需要从外网加载的内容。建议把内容较大并且更新频率高的,都放到外网动态加载,要上传的项目包内,仅包括初始化加载必须的,和很少要改动的内容即可。尤其是大型游戏项目,可能JS加起来就2M多,那么仅剩的空间,只能用于Loading页的背景图资源。

Tips:4M的本地包内容无法动态更新或删除。每次修改必须要重新上传发布。

2、小游戏应用程序主文件

示例中的LayaUISample.max.js是LayaAirIDE创建的项目文件,也是小游戏应用程序的主文件,TS或JS项目如果开发时有多个项目文件的,需要合并成为一个JS文件作为小游戏应用程序的主文件。

3、小游戏项目文件

game.js、game.json、project.config.json、weapp-adapter.js 都是微信小游戏的项目文件,只有创建小游戏项目的时候LayaAirIDE才会创建。

二、一些踩过的“坑”

1、管理项目,只能创建、切换和删除。

在微信开发者工具里,项目一旦建立,没有编辑修改项目信息的地方。如果想修改项目信息,不用费力气去找这个功能了,直接删除项目重新创建即可。因为工具里的删除只会删除项目信息相关的内容,项目本身不会被删除。

项目菜单里点击查看所有项目可以查看到当前存在的项目列表,直接点击项目,可以实现切换,点击加号创建按钮可以创建一个新项目。

如果想删除项目,点击管理项目可进入项目批量删除的界面。

2、读本地文件必须是ASCII编码

之前提到每个游戏有4M本地物理存储空间,这里需要特别注意的,如果需要读取本地物理空间内的配置文件,比如json文件。由于浏览器加载文件编码没有限制,引擎没有预留编码设置接口。而小游戏里读本地资源会校验编码,所以,当小游戏本地文件的编码格式不是ASCII,那就会报错。如果有配置文件存在4M的本地包内。目前必须要改为ASCII编码,后续引擎版本计划支持编码读取设置。

Tips:本地程序文件之间的引用(比如require或import)或者才是从网络中动态加载读取,都没有编码的校验限制。

3、不支持loader预加载声音使用

用LayaAir引擎开发小游戏时,要注意,不支持通过loader预加载声音文件的使用方式,声音播放直接用SoundManger音频管理类即可。

想了解更多微信小游戏的内容,可以关注开发者中心的技术文档,我们会不断的进行技术上的更新。如有关于微信小游戏的问题,欢迎LayaAir引擎的开发者前往开发者社区提出,我们针对每一个问题都有官方工作人员帮您解答。

社区地址:https://ask.layabox.com/

开发者中心:https://ldc.layabox.com/

END

0 人点赞