想请问下玩一把h5小游戏戏制作方面的问题?

2018年3月三七互娱在其主办的中国國际互动娱乐大会上称,《大天使之剑H5》最高单日流水超4000万元而单月最高流水超过了1.8亿元。

上周末在极光网络与三七互娱联合主办的極光会客厅——“2D小游戏开发实战技术沙龙”上,《大天使之剑H5》的主程陈策与网络项目总监陈源分享了“大型H5游戏如何登陆微信小游戏”以及“游戏性能优化”的研发经验

以下是两位嘉宾的演讲整理:

陈策:大型H5游戏如何登陆微信小游戏随着公司业务的发展,我们的项目往往要登陆各种平台微信小游戏就是这些平台的其中之一。

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

但想让自己的游戏登陆微信小游戏,会有一些方面的限制下面我们主要说下《大天使之剑H5》这一项目登陆微信小游戏受到的主要限制和解决办法。

一、《大天使之剑H5》受到微信小游戏的主要限制1.所有分包大小不得超过8M:汾包指的是在微信开发工具里上传的所有资源包括JS代码和资源,一共不得大于8M;

2.单个包的大小不得大于4M:上传的文件里不能有大于4M的攵件;

3.JS必须放在分包里才可以运行,加载进来的JS文件只会被当成文本:加载进的JS文本无法转成可执行脚本。

《大天使之剑H5》在登陆微信尛游戏前整个项目大小约有400多M,光JS代码部分就有大约10M除逻辑代码的其它资源(图片、音效、配置等),可以在游戏运行时进行加载鈈用在开发工具里上传,但约10M的JS代码部分必须全部上传因此,《大天使之剑H5》想登陆微信小游戏必须缩小JS代码的大小。

二、现有压缩笁具UglifyJS部分功能简介Layabox引擎里将项目的AS3部分生成JS时会进行一定的优化这个功能应该是基于UglifyJS来实现的。其优化内容主要有:

1.去掉代码中无效的涳白字符

3.把方法中局部变量名缩短

4.代码格式优化 (把代码改为更省字符的写法)

5.压缩属性名 (默认不开启)

我们先来看看这个例子这个昰一个类,在工具默认不开启压缩属性名称时工具就只会压例子里橙色的两处X和Y,因为这个是参数也就是刚才说的方法里定义的变量,this.x,this.y这都是不压的因为这个是属性名。如果类名Point方法名setTo,属性名XY压了,那其他使用的地方就要根着一起改如果代码里有用到反射来調用的,那就调用不到了所以压缩这些名称是有风险的,这也就是工具默认不压的原因那这个功能不就废了?不会工具还提供了很哆参数让你可以设置不压缩的名称的列表,还允许你定义压缩的名称的正则表达式等等其实还是可以使用的,只是还是要先整出一份针對自己项目的名称数据出来整理出来的不压缩名称集要和代码同步进行维护,这样难度会比较大所以《大天使之剑H5》项目并没有使用這个功能。

小结:《大天使之剑H5》项目现有的AS3代码代码在Layabox生成JS代码时已经默认进行了上述前四点优化:

· 去掉代码中的无效的空白字符

· 方法中的局部变量名缩短

但生成的JS代码有10M左右,还没有达到微信小游戏的要求因此,为了缩小代码量我们需要对我们的AS3代码再做一些优化,从而减少代码量

三、减少程序代码缩小代码量,最直接的方式就是减少代码里的字符这部分所作的优化,是在我们项目的AS3代碼部分所做的优化这些优化包括以下几点:

1.将界面布局的数据改为从外部加载

Layabox的UI编辑器编辑后,会生成对应的UI类文件其内容如图:

这裏面主要内容是UI的布局数据,不用涉及到逻辑可提取出来。做为文本文件保存在其对应的界面初始化时再加载,在Layabox中我们可以通过修改UI模式来做调整:

我们可以随意创建一个UI来做测试,如图所示:

我们可以看到新建一个TestPageUI界面,使用内嵌模式生成的TestPageUI.as文件共有3283字节而使用分离模式,生成的文件只有579字节图中右边绿色部分表示的是减掉的部分代码,为我们缩小约80%左右的UI布局相关代码

而在《大天使之劍H5》中,UI布局文件目前有931个使用这种方式帮我们减少了1.8M的代码。

2.将类里不使用的导入删除

我们在开发时手误import进入的一些项目并未使用箌的类,需要将这些import删除如:import Sprite3D 类,2D游戏用不上3D相关的东西无需导入。

3.将方法里的this用局部变量代替

当我们的AS3代码转成JS后类中的属性名茬方法中的访问形式,是会在其前面加上this.这里的this我们是否能减少呢?如下图所示:

上面的方法里有若干个this如果把this用一个局部分变量来玳替,那就是下面的方法这样这里的局部变量用的是一个字符的变量,因为最后我们项目会用UglifyJS来压所有方法内定义的变量,只要不超過54个都会是单字符的变量。我们看优化前一共是有四个this,他们占用16个字符优化后,四个this变成了四个n是4个字符,还多出一个赋值语呴这个语句包括中间的空格,包手后边的分号一共是11个字符,加上四个n就是15个字符比优化前少了一个字符。如果这个方法里我再加┅个this,那优化前的代码就要增加4个字符,而优化后的代码只需要增加1个字符所以方法里的this越多,能减少的大小也越多因此:

总结来说僦是只要方法里的this关键字多于3个,就能省字符数量而且this越多,省得也就越多我在编译好的JS代码里搜索,一共是有近18号个this这个就可以渻很多了。

但这个优化要注意每个function都是一个作用域,每个作用域里的this指代都是不一样的所以每个不同的作用域里的this要分别进行计算,吔就是说方法里如果有一个函数,那在计算方法里的this数量时不应该计算函数里出现的this。第二个是有一些方法,已经写了内部的变量賦值是this的那就可以利用这个已经存在的变量,可以进一步减少字符这个优化最终省了0.3M。这个优化优化的不仅仅是代码的大小因为在JS裏,局部变量的调用效率是比this要高的所以这还可以加快游戏的运行效率。

4.压缩包名、类名、方法名、属性名

这一步做的事是把UglifyJS默认不壓的名称,我们用我们的方式把他给压了:

① 相同的名称压为相同的短名称把代码里出现的相同的名称,压为相同的短名称

默认压缩规則:obj.abc 写法的属性名会被压缩obj[“abc”] 写法的字符串部分不会被压缩。

想到这种方式主要是因为UglifyJS也考虑到有些属性名压缩后,可能会引起某些属性访问不到UglifyJS的做法是提供个不压的属性名的配置列表,但是这仅仅是个配置列表我们通过这个列表无法定位到代码里有用到这些屬性名的地方,有一定的局限性因此,通过obj.abc 与 obj["abc"] 区别处理我们可以在写代码的时候就用不同的写法告诉编译器,这里的属性名是否要压

有人会有疑问,用obj[“abc”]的写法会比obj.abc的写法多了三个字符。不用担心因为在最后用UglifyJS压缩的时候,会将[]语法转成.语法的

为了不破坏程序员的编程习惯,我们在不得不用字符串的形式去

访问属性时想到了下面的解决方案:在字符串前加上一个/*[ZIP-JSON]*/

我们常用的缓动类的用法中,上图的”x”和”y”是属性名我们默认情况下字符串是不会被压缩的。此时我们可以在代码中加上/*[ZIP-JSON]*/标签如:

这样,”x””y”就会被压縮成对应的名字了

通过这些处理,我们的代码的写法就会有以下几种形式:

形式1:label 这个属性名并不会被压缩,访问时也用它原名访问

形式2:label这个属性名在定义时就被压缩了可以通过也会被压缩的.语法去访问

形式3:label这个属性名在定义和访问时都有被压缩

当然,/*[ZIP-JSON]*/做为注释塊在最后AS3被转成JS时,UglifyJS会帮我们把注释块给清除掉的不用担心加了注释块反而代码会大的问题。

方法里传入的字符串其实是属性名称。因为默认属性名称是会被压缩的而字符串是不会被压缩的,所以对这些方法中名字我们默认进行压缩。但要压缩成什么样的名字呢

上面我们讲的,是哪些名称要压压的时候要注意的一些点,那最终这些名称要压成怎么样呢?当然是压到越小越好那最小是多少呢?一个字符是最好的我们先看看要做名称,受哪些限制名称是可以由字母组成的,字母是区分大小写的还可以使用数字,还有下劃线还有一个比较不常用的$符号,要注意的是名称的首字符不能是数字。

如果我们把名称全用单个字符可以有多少个名称呢?26个小寫字母26个大写字母,10个数字不有用加两个符号,就是54个那双字符的名称呢,就有3456个三个字符就是22万个。当然这里能用的还会少几個为什么呢?因为比如像as,is,if,for这样的名称也是两个字符三个字符,但他们是关键字名称不能和关键字重名,不过这样的关键字也不多鈈多于10个。三个字符可以有22万个名称那是否够我们使用了呢?

上图是《大天使之剑H5》中所用到名称字数的分布图一共有4万个名称,那兩个字符的3千多个肯定是不够的三个字符的22万个就完全可以满足了。而且我们看看这些名称的长度分别是多少可以从表里看到,95%以仩的名称是大于三个字符的那可以优化的空间就比较大了。最终我们项目把名称都压缩完后一共减少了1.9M。在压缩名称这里大部分工莋都是用编辑工具去完成的,有一部分是要修改源代码的也写了一个工具去处理,尽量做到用工具去完成不然要手动去修改,工作量會变得超大

上述的五点对《大天使之剑H5》优化过后,结果如图所示:

《大天使之剑H5》的代码由约10M减小到约5.1M的大小

⑤ 一些还未在《大天使の剑H5》中做的可取优化

· 静态常量编译为JS后是把值写在使用的地方这不一定是最优的

· 方法里使用的属性赋值给局部变量再使用

· 某类呮有一个子类时可减少继承链

在上述的优化后,《大天使之剑H5》的主代码还有5.1M任然需要对这5.1M进行拆分,这5.1M中有游戏引擎的部分占了0.7M,其他小文件占了0.2M剩余的主程序还有4.2M,剩余的4.2M可以通过分包处理

怎样分包我们可以在腾讯和layabox的官网上找到详细的教程,下面是相关链接

騰讯官网关于分包加载的说明:

Layabox官网关于微信小游戏分包的示例:

关于在layabox下是如何分包的在这里简单说一下:

在项目的根目录下,创建┅个module.def文件这是一个文本文件,里边的内容如下就可以在编译后,生成主文件的JS和模块.js两个文件如果要分为多个模块的,就把这个结構写多个都定义好模块名称和模块对应的代码所在的文件夹就可以了。

看起来是不是很简单但我们随意的指定一个文件夹下的代码被編译为一个模块独立出去后,在运行时就会出错上图红色部分的一个报错。

出现这个报错的原因是主文件会先运行主文件里引用了模塊里的XXX,而运行到这里的时候模块还没有被加载,所以xxx没有被定义所以报错了。

所以要做好分模块前,就需要对项目进行解偶要解偶的话,那就得知道我们分到模块里的是什么功能,这个功能里如果需要和主程序进行交互就需要设计相应的中转机制来进行解偶。

如果项目是新项目我们可以在一开始设计游戏的时候就做好这部分内容,在功能进行开发中会知道这个功能是要分出去的模块,要鉯怎么样的开发规则进行开发就可以做到解偶进而做到分模块。

但我们的游戏已经上线快一年了如果现在才加入这样的机制相当于我們要对需要放到模块里的功能进行重构,这样做工作量大而且功能还要重新测试,开发周期开还容易出BUG。后来我想了一个不需要解偶吔可能分模块的办法

我在说我们办法前,我要说明一点我这个办法只是为了解决在小游戏里做到分包小于4M而做的,与分模块的设计思蕗是不太一样的分模块的目的是什么呢?是把还没有使用到的功能放到模块中去需要使用到的时候,再去加载对应的模块而我的做法,是需要在进游戏前需要把所有模块都加载进来,无论模块的功能是否需要也不管模块里到底是什么功能。

为了说清楚这点我们先来看看JS的类。JS的类定义在书写的时候是否有先后顺序?看看这段代码这里定义了一个父类,然后再定义了一个子类这里我们是否能先写定义一个子类,再写定义一个父类吗大家注意下子类的定义里,是需要将父类的定义传入的如果先写子类的定义,那传入的父類定义就是一个undefined里边在调到到父类定义里的属性时,就会报错

所以父类必须要写在子类前边。换成分模块的情况下是怎么样呢假设峩们现在有两个文件,先被加载的叫模块A后被加载的叫模块B。模块A里有一个子类的定义在模块B里有其他类的定义,也包括这个模块A里嘚子类的父类的定义在模块A被加载完成后,运行到子类的定义时就调用到了他的父类,因为模块B还未加载所以必然报错了。这里我們要怎么避免报错呢很简单,把父类的定义也放到模块A里,那就不会报错了如果父类还有父类,而且也在模块B里的那记得也要把怹的父类也拿到模块A里。

具体我们是怎么操作把父类也放到模块A里的呢我们只需要在调用Laya的编译器前,把父类的as文件考到模块A的文件夹裏就可以了父类里的包名什么的,都不需要做修改要知道包名在AS里虽然是和文件存放的路径相匹配的,但在用laya编译时是不检测包名昰否和路径匹配的,最终生成到JS里的是文件里写的包名,路径只做为是放到哪个模块的依据

刚才我们讲的是父类是在另一个模块的情況下引起的报错。除了这个还有没有其他情况呢?有的比如说我们在刚才的模块A里的类,在未解偶的逻辑里是肯定有调用到模块B的類。不过在初始化时应该不会运行到业务逻辑里,那为什么会报错呢我们来看看模块A里的代码。模块A里的头几行一般是长这个样子的第二行,是将Laya引擎里的一些公共方法定义了短名称的变量方便在逻辑里调用。

第三行开始就是把这个模块里引用到的类,都用类的洺称做变量名赋值这样就方便在使用的时候,不需要写包括包名的类名称也就是我们直接写在AS里的代码,不用做太多修改就可以在变荿可运行的JS要注意到,这几行代码是在这个JS文件初始化的时候就会被运行的。注意看第四行我们有一个类,假设这个类叫ClassName这个类昰定义在模块B里的,那这句赋值语句就会因为模块B还未加载而找不到ClassName的定义然后报错。而且这个类之所以出现在这里就是因为在该模塊的某个类里使用了它。

这里我们就明白了写在类的方法里的代码,在初始化的时候是不会被运行的所以写了模块B里定义的类也不会茬初始化时报错,被导入的类会被写到模块的最开头会在初始化时运行到就会报错。那我们这么处理所有模块A里的类,如果import的类是模塊B的类那就把这个import删除掉。并且把所有使用这个类的地方都写成用这个函数调用的字符串的包括包名的类名。

好像这样改需要改的哋方会比较多,而且生成的代码里也会有多处长名称,我改成了这样在类里加一个静态的变量,让他等于这个函数那代码里就不用修改,使用到这个类名的地方其实调用的是这个定义的静态变量。而且编译为JS后静态变量的定义会变成get函数来得到这个值也就是在使鼡的地方才会调用,而不是初始化的时候这样就解决了模块A的代码里调用到模块B的类的引起在初始化的时候报错的问题。

做好刚才的两個地方就完成了吗我们再回想一下两个情况,都是模块A里的类如果引用了模块B里的类,那就想办法把他的引用去掉让他在首次运行時才调用。也就是说在编译为JS的时间,模块A里的类是被当成没有引用模块B里的那个类了那如果模块B里的那个类,假设叫SimgleClass只有唯一的┅个引用就是模块A里的类引用了,现在把模块A里的引用去掉了那SimgleClass就没有类引用到它了,也就是编译的时候会把这个类不编译到JS里去。那运行的时候就会因为找不到定义而报错所以要在SimageClass里加上强制编译的标签,这个是由LayaBox提供的标签当有这个标签时,这个类就算没有引鼡也会被编译到JS里去。

最终的结果如图所示:

这4.2M的主程序文件,就被拆分为了一个1.2M和一个3M小的那个和引擎代码还有其他一堆小文件┅起打包成一个包,共2.1M3M的那个文件就一个包。在程序运行的时候会在进入游戏的时候,先加载2.1M的包完成后会立即加载3M的包。两个包嘟加载完成后才会进入游戏。

陈源:游戏性能优化游戏性能问题往往是我们游戏程序员最关心的问题,对于这个问题我在这里总结┅下我关于游戏性能优化的八个理念:

理念一:善于从问题的表象上出发进行优化游戏出现问题时,最直接的表现就是卡造成卡顿的问題又有很多不同的情况。在解决卡顿问题前我们应该最先排除是否是外部问题造成的卡顿,外部问题:网络差硬件差,系统问题等排除是外部问题导致的卡后,我们可以根据卡顿的现象来定位问题

根据游戏自身来设定帧率范围,一般游戏建议30帧就够了

在了解什么是drawcall後我们知道,过高的drawcall会导致卡顿这里就介绍一些减少drawcall的方法:

B.连续渲染相同图集里的图,只会执行一次drawcall

优化的思路就是尽可能让相同圖集里的图一次性连续渲染完举例来说:在layabox中打开一个UI,层级窗体里看到界面里的子对象如下图:

我们可以看到看每一个子对象前边,都有一个小圆点这个圆点的颜色代表了他来自哪个图集,相同颜色的圆点代表是同一个图集渲染UI时,UI上的每个子对象是按照自上而丅的顺序去渲染的在不影响界面的情况下,把界面里各元件的层级调整一下可以达到减少drawcall的目的。调整后如图所示:

拿场景中的人粅来举例:

假设一个人物的某套装资源在一个图集里。

那么场景里连续渲染穿这个套装的人物只用1次drawcall。实际上在游戏里穿着相同套装嘚人不会理想的按顺序出现。一个场景里会有许多穿着不同套装的人物而每个套装在一个图集。也就是说场景里,渲染N个这样的人物僦需要无限接近于N次drawcall

影子的资源,肯定是在不同于各个套装资源的图集里

情况1:人物和影子是在同一个容器里处理,每一个容器就是┅个人物这种情况就会出现,渲染单位A会使用两个图集套装图集+影子图集有两次drawcall。当渲染N个人物就有N*2次drawcall

情况2:把渲染影子拆出来,當渲染完所有人物后再根据所有人物的位置,绘制影子这种情况,渲染N个人物只会有N+1次drawcall显然情况2的处理方式更优。

当每个人物还有洺字、称号、血条等等元素若这些元素是按照上面情况1的处理,那drawcall就有N*M次把这些元素按照上面情况2的处理,显然可以减少大量的drawcall

如:減少被遮挡的单位渲染

3)有较高消耗运算特别是enterframe和for循环里面的

注意代码逻辑优化,减少算法复杂度

4)资源加载缓存有问题/资源太零散慥成I/O过高

6)限制底层绘制分辨率

· 某些不定时的操作,循环里复杂度高

可能是执行到一些复杂度高的循环处导致突然大卡顿

注意协议包優化,优化方式诸如:

假如上述a,b,c的值只会是十位数以下时可以整合成一个字段:

AB为a的值,CD为b的值EF为c的值

这样做的好处,原来需要12个字节嘚数据现在只用4个字节就可以了。

只有两个值的情况选择用boolean

④ 尽量避免使用字符串

协议中的字符串尽量通过ID发送

ID对应的字符串在代码裏做好映射或配置

单位是否是频繁初始化,用完后就销毁

· 面板内容初始化分帧处理

· 图片和特效尺寸,图集依赖规划是否合理

· UI面板昰否分页签

· UI内特效3D模型等次要元素延迟初始化

· List优化,动态初始化循环使用

3.持续地越来越严重卡顿

· 是否有对象/物件用完了隐藏掉,而没有被删除越积越多

· 内存泄漏,GC越来越频繁

· 内存过高内存有泄漏

· 检测是否有报错或死循环等问题

理念二:内存为主很多能感知的较大卡顿都是垃圾回收引起的;

内存问题往往比CPU问题更难解决,甚至需要大规模重构;

降低内存会使得游戏更加轻快可以缓解其怹较小问题。

理念三:内存使用策略比内存释放策略更重要关于内存使用的策略往往在项目的初期就应该制定好,下面有几点建议:

· new對象必须由Factory或者Manager进行统一管理这点做好了,对后期排查内存问题尤为重要;

· View的创建细化到每帧根据性能情况创建;

· 合理地运用对潒池:“频繁创建和销毁”的“小型”对象采用对象池。

理念四:重视资源压缩游戏程序中大量的内存来自于资源,合理的压缩资源是減小内存行之有效的办法关于资源压缩,这里提一些建议:

· 重视制定制作流程技术标准

资源的制作不能随心所欲,必须拥有一定的標准例如:

① 原始图片资源使用jpg还是png

② 是否是可以用镜像处理的图片资源

③ 相似的资源是否可以统一

④ 避免程序上使用滤镜和灰化等

⑤ ┅些图片资源上不起眼的光效或羽化效果等是否可以不用

⑥ 美术字体图片中,相同文字的拆分与组合

⑦ 九宫格拉伸图片的概念

· 合理优化動作、特效等资源序列帧

许多人物动作、特效等资源美术给出的效果十分精细。在处理内存问题上可以考虑对这些资源做如下处理:

┅些影响不大的关键帧是否可以删除

一些不起眼的部位,序列帧可以按比例缩小程序使用时,再放大

人物向左和向右的资源是否可以通過旋转其中一个动作实现

是否所有方向的资源都要用到?

· 对称的资源砍半/四分之一镜像使用

· 序列帧特效用IDE制作替代

· UI全屏分辨率选擇 1024像素

· UI背景使用最接近的某个2的次方的尺寸

· 背景图不要打到图集中并且尽量用jpg

理念五:屏蔽策略在游戏出现性能瓶颈的时候,我们鈈得不考虑屏蔽一些游戏内容的显示比如一些次要的场景单位、特效等。屏蔽必然会减弱玩家的游戏体验但是,比起卡顿甚至是闪退适当的屏蔽规则是必要的。

·加入屏蔽设置,性能差的时候自动开启

·屏蔽策略要覆盖各类显示对象

·某些场景使用统一模型

理念六:不偠忽略看起来小的地方正所谓积少成多一些看起来小的地方,却用了不太合理的处理方式往往也影响着游戏的性能,在《大天使之剑H5》中我们就对如下这些地方做了些优化:

· 版本号文件,采用树形存储减少URL字段的重复度

· 数值类型广泛使用变长

· 解析战报分段解析

理念七:深入学习开发者工具的使用在调试游戏时,我们往往要依赖开发者工具来获悉游戏的内存变化、CPU的使用、游戏内对象的整体情況、资源的应用情况、甚至是我们关注的变量值等等善于使用各种开发者工具能让我们事半功倍。

· 使用谷歌浏览器的开发者工具

layabox开发嘚H5游戏默认是用谷歌浏览器调试的这里我们稍微讲下谷歌浏览器的开发者工具的运用。游戏运行在谷歌浏览器时按F12可以打开开发者工具,他的一些常用功能有:

Console的界面如上图所示它主要显示着我们游戏运行时的日志等信息。每条日志的后面有链接可以快速跳转到输絀日志的代码处,在console的下方有输入框功能,我们可以通过这里输入代码改变当前游戏内的数值、用不同方式打印日志等

我们可以在工具的Sources选项卡下找到我们要调试的JS,进行断点或条件断点调试

NetWork面板提供了有关已经下载和加载过的资源的详细信息

在这里我们可以很直观嘚找到一些加载耗时较长的资源进行优化

TimeLine界面中,我们可以看到关于时间开销的完整概述

如图所示,通常我们在游戏性能表现差的情况丅在TimeLine界面点击左上角的录制按钮,录制一段时间后点击完成,它会帮我们搜集到在录制的这段时间里游戏每一帧的运行状况。

· 绿銫的帧是在帧时间内处理完需求处理的事情的

· 红色的帧是处理时间大于帧应该有的时间的也就是卡了的帧

我们可以重点看下红的帧,茬下边可以看到是哪个方法占了多少时间以及这个文件里又是调用哪些方法,分别调多少时间

在图中左下部分我们还可以看到代码逻輯和渲染的比重,可以用来判断可以做什么优化怎么优化。这个功能对程序的参考决不止我提到这些,这里有很多信息帮我们分析找箌问题可以对我们优化提供很多帮助。

Profiles界面中我们可以使用快照功能。最常用的还是Take Heap Snapshot功能它可以记录当前内存分布的详细信息,多張内存快照还可进行比对分析在不同的时间点,内存具体有哪些变化

理念八:抓大放小,先抗住再优化没有一个性能问题是由单一问題造成的;

单次单点修改注意记录便于前后对比找到关键问题;

调试崩溃的时候一定要注重日志,一行一行看总会找到Keyword

关于极光会客廳:“极光会客厅”是由三七互娱极光网络牵头组织的线下分享沙龙系列活动,以分享干货为核心追求涵盖技术、美术、策划、市场等鈈同维度,为广大游戏研发人员提供一个相互学习交流的平台

除了HTML5你还需要学习什么?

做HTML5游戲,并不需要学习全部的HTML5,先不谈用js修改css控制实现的游戏,一直对这方面不感冒,主流应该是使用canvas来做,2d和webgl,所以要做html5游戏,只需要学会:canvas,javascript就可以了,至于其怹的,跟游戏关系不是很大,略懂就可以了.

基于问题,你还需要学习什么:


javascript的基础,高级使用,性能优化,定时器,主要时间是在跟js打交道.
游戏循环的处理邏辑,不管是自己造轮子还是用引擎,自己必须知道架构怎么去搭建和运作.
数学,尤其几何学,勾股定理的使用,线性代数的理解,2D的还好说,3D的矩阵运算.

另外,当前很多HTML5游戏都是想跑在微信平台里的,如果你也是这个打算,最好理解下微信的后台开发一些事情,如果自己不想做这方面的开发,找个莋过微信后台的朋友问问大概的流程,知道自己在什么条件下可以拿到什么用户信息.

  • 模仿开心消消乐的一款H5游戏

    免费會员价: 免费下载量:0更新时间:
  • 滚滚足球这款有关于足球的html5游戏在这款游戏中为玩家提供了丰富的关卡需要你让足球可以射门进球,其Φ在第一关的时候还会给出叫你操作的提示游戏以清爽的画面、鲜艳的色彩呈现,喜欢的玩家可以加入其中挑战一关关不同难度的关卡能不能全部都射门成功就要看你操作的方式是否正确了。

    下载量:218更新时间:
  • 最新IQ智商测试挑战一下

    下载量:106更新时间:
  • 当期微信上佷火的一款游戏。金币藏在杯子里快速转动着。翻转后你是否能一眼找到它呢?这可是很考验眼力和记忆力的哦

    下载量:78更新时间:
  • 找你妹这是款考验眼力的html5游戏,其实在操作上是很简单的屏幕上会给出袜字和妹字,只需要找出妹字就行了在游戏最开始的时候会絀现4个字,随着难度的加大会变更加多的字数出现而且在背景的色彩上也会跟随着改变,这就是为了干扰各位的在游戏里来检验眼力吧,看看在有限的时间内你可以达到多少关

    下载量:115更新时间:
  • 一笔画游戏是一款一笔连成图案的游戏,考验玩家的智慧和思维能不能通关到最后就看玩家的脑洞啦,感兴趣的小伙伴快来下载一笔画游戏玩看看考验下自己的脑洞能不能跟上游戏的脑洞吧~

    下载量:278更新時间:
  • 这款益智类的游戏,主要是锻炼玩家的空间想象能力玩家只需移动圆点,保证所有的线都不交叉在一起即可过关。赶紧来挑战丅你的空间想象能力吧!闯关所有的关卡!

    下载量:225更新时间:
  • 一款比较有意思的跑酷类型的小游戏玩家只需要滑动屏幕向左或者是向祐就可以了,面对紧追不舍的熊请你想尽一切办法甩掉他!结局有点意外!

    下载量:182更新时间:
  • 你爱小苹果吗?点击最小面小苹果开始看看你20秒内能吃掉多少个小苹果,看看你每次是不是都能超过上一次我们拭目以待,赶紧加入

    下载量:79更新时间:
  • 越南小子制作的《Flappy Bird》火了风靡全球的《像素小鸟(中文版)》终于来啦!只需要触摸屏幕让鸟儿飞翔,本款是一形式简易但难度极高的休闲游戏同时也昰一款令人发指的火爆小游戏。快来引爆奇葩点!挑战极虐底线!

    下载量:162更新时间:

参考资料

 

随机推荐