Appearance
总结篇-优化与总结
总结篇:优化与总结
不知不觉小册的内容已经接近尾声。当然,开发一款优秀的游戏不是一蹴而就的,需要不断的进行优化和迭代。小册的最后,我们将带来一些通用优化方案的介绍,希望读者可以从中得到启发,对游戏进行打磨。此外,我们还会回顾下小游戏开发的注意事项,反思我们的游戏中是否有出现类似的情况。
1. 优化方案
配置小游戏分包。 小游戏的分包能力,可以实现按需加载代码包。在开发中,可以根据业务场景划分模块(如:商店、任务、背包等),把这些模块作为代码包配置为多个子包,主包仅实现主场景和核心逻辑,保证主包尽量小,以提升游戏呈现速度。
做好资源分组和缓存。 模块的逻辑代码可以进行分包处理,资源(包括外部资源)也可以进行分组,按需进行加载;另外,小游戏为每个微信每位用户分配了 50M 的缓存空间,对于一些大型的资源或需要动态替换的资源,通过接口下载后,可缓存到本地,用户再次进入游戏时,直接从本地读取资源,游戏呈现速度也能大幅提升。
合理使用对象池。 游戏中有重复使用的对象,如井字棋中的棋子,实时进行对象的创建和销毁,很带来一定的性能开销。因此,在使用对象前,需先预创建足够数量的对象,通过对象池统一管理,每次使用完后进行回收,以供复用;也可以在每一次需要获取对象时先从对象池中查找,如果没有可用对象则进行创建,若有可用对象则直接进行复用。
及时触发垃圾回收。 游戏运行一段时间后,占用的占用可能会不断加大。因此,需要在适当时机触发 GC(即 Garbage Collection),以降低游戏内存使用。在回合制的游戏中,可以在每个回合开始或结束触发 GC;在
wx.onShow
或wx.onHide
时也可触发 GC。GC 时机是由 JavaScriptCore 来控制的,并不能保证调用后马上触发 GC。
精简复杂的逻辑计算。 频繁的复杂计算会带来性能损耗,开发完成后,要及时做 Code Review,反思代码逻辑是否有优化空间,减少一些非必要的操作。如在代码中使用碰撞检测,在不需要过度精准的前提下,是否可以使用近似图形来代替像素检测的方案,以简化像素获取的操作。
资源和动效的优化。 资源优化是 Web 开发老生常谈的话题了,图片体积压缩,使用合适尺寸的图片资源,合并雪碧图,音效体积压缩,裁剪合理长度的音效等,这些手段在微信小游戏都是同样适用的。此外,游戏开发往往涉及动效,在开发重要注意使用
requestAnimationFrame
来实现动效,并调整到合适的渲染 FPS。对于帧动画,在不影响体验的情况下,可适当做抽帧处理。根据监控数据和用户反馈优化迭代。 通过对游戏进行数据上报和监控,可以分析游戏过程中玩家的行为,并及时发现游戏设计中不合理或存在问题的地方;游戏圈和客服组件的接入,可以更近距离与玩家进行沟通,收集游戏反馈。基于监控数据或用户反馈,都可以对游戏做出适当的优化迭代。
2. 注意事项
杜绝“分享滥用”。 “分享滥用”包括强制阻断游戏流程、强制要求分享到不同微信群等强制分享行为;也包括利诱分享、弹窗/弹层大图诱导分享等。滥用分享对于用户体验的破坏。2018年5月,微信官方对小游戏的分享规则和功能进行调整:小游戏分享玩法不得强制分享,必须同时提供用户跳过或重玩入口;不得强制要求分享到不同群;而分享功能上,用户从小游戏分享消息到微信聊天时,开发者将无法获知用户是否分享完成,也无法在分享后立即获得群 ID。更多详细规则可查看:《分享功能调整》。
wx.getUserInfo
接口直接弹出授权框的开发方式将逐步不再支持。 2018年4月30日开始,小游戏的体验版和开发版调用wx.getUserInfo
接口,将无法弹出授权询问框,默认调用失败。开发者可使用用户信息按钮UserInfoButton
来获取或展示用户信息(开放数据域下可直接调用wx.getUserInfo
接口,无需用户授权)。【作废】
wx.createUserInfoButton
加载本地图片时需要先wx.createImage()
。 使用创建用户按钮时,image
可使用本地图片,也可以使用网络图片,当使用网络图片时,直接配置对应 url 即可,但使用本地图片时许多开发者会发现无论路径如何配置,都无法显示图片。使用本地图片时,需要先使用wx.createImage()
创建图片并设置 src,之后将 image.src 填入。var image = wx.createImage() image.src = 'res/login_button.png' wx.createUserInfoButton({ type: "image" , image: image.src, style: { width: 120, height: 40, left: 100, top: 100 }, })
2018.09.26 修订:1.02.1807120 版本开发者工具已修复此问题,使用本地图片时直接填入路径即可。注意:开发者工具中,调试基础库需 >=
2.0.6
才能支持该 API 调试。小游戏所有分包大小不超过 8M,单个分包/主包大小不能超过 4M。 2018年6月,微信官方将小游戏的总包大小提至 8M,并提供了分包加载的能力,单个包的大小不得超过 4M。开发者可根据用户需要,在合适时机下载指定包而非全部。
开放数据域目录(即 game.json 中 openDataContext 配置的目录)不可以设置为分包或置于某个分包下。
小游戏中图片尺寸有限制,长宽需小于等于 2048px。 若使用的资源图片超过 2048px,开发者在微信开发者工具中仍可以正常预览,但真机预览时会出现图片加载失败的错误,在 vConsole 中会显示。开发者需根据实际需求对图片进行切割,或者采用其他方案代替。
为确保用户能正常体验,开发者需要后台设置基础库版本。 为便于开发者解决低版本基础库无法兼容小程序的新功能的问题,开发者可设置小程序最低基础库版本要求。设置后,若用户基础库版本低于设置值,则无法正常打开小程序,并提示用户更新客户端版本。 登录小程序管理后台,进入“设置->基本设置->基础库最低版本设置”进行配置。 在配置前,开发者可查看近30天内访问小程序的用户的基础库版本占比,以帮助开发者了解当前用户使用的情况。
3. 了解更多
小册的案例源码已经放到 Github 上,读者可以自行下载。
微信小游戏目前还在不断迭代中,相关的能力和规则也陆续更新,读者可通过微信公众平台对小游戏做全面的学习,还可以通过“做个小游戏”公众号获得官方资讯。
4. 结语
常常听到身边的不少开发者调侃:“不要再出新的技术了,学不动了!”诚然,技术的发展日新月异,这迫使作为开发者的我们需要不断去学习,更新自己的知识体系。但换个思路想想,正是技术不停地更新换代,才使得我们所处的行业得以迅速发展,保持着蓬勃向上的活力。面对新的知识领域,是挑战,更是机遇!
在众多的开发领域中,游戏开发有着更多的趣味性,因为游戏好玩,因为游戏本身充满情怀。相信在每个人的成长中,游戏都扮演着自己独特的角色。下课铃响后,一张纸,两个人,两横两竖,一圈一叉,那简单的快乐,就是我们的情怀。
现在,平台有了,技术有了,而你,又将为我们带来什么样的快乐呢?
5. 致谢
小册从策划、撰写、修订、发布,最后得以与大家见面,每一个过程都凝聚着凹凸实验室每位作者的心血。虽然篇幅不长,但我们希望尽可能把所有知识点为大家讲透,把可能遇到的问题提前告知。如果在学习过程中,有不明确的地方,可以随时在读者微信群和我们交流;如果小册中有遗漏和错误之处,也请帮忙斧正。
开发者学习的过程是持续的,这里既是小册的结尾,也是我们出发的起点。在小游戏开发的路上,让我们一起携手前进!加油!⛽️