优秀的跨平台能力是 Cocos 的核心特性之一,我们努力确保使用 Cocos 生产的内容,能够在 PC、Web、Android、iOS 等各个平台上运行,并拥有一致且高质量的画面表现和运行速度——其中自然也包括增长最快的平台之一,HTML5。
随着海内外 HTML5 游戏平台的发展,开发者有越来越多的渠道来分享他们的游戏。Y8.com 是一家游戏开发与发行公司,是网络游戏领域最知名的公司之一。依托于自身成熟的平台与庞大的用户群,Y8.com 正在为 H5 游戏创造新的机会与可能。
本次,来自 Y8.com 的开发者 Martin Kral 将和我们分享他创作的一个 Roguelike 生存割草 H5 游戏,聊一聊他的开发经验与技巧,并将游戏源码开放给大家免费下载。
(相关资料图)
游戏截图
你好 Martin,很高兴和你交谈。你从事游戏开发多久了?
Martin:我已经从事游戏开发大约 12 年了,其中 9 年是专业的。前三年,我没有足够的收入来维持自己的游戏开发,所以我被雇用在不同的岗位,并在空闲时间学习开发技术。
和 Y8 的合作成效如何?
Martin:在 Flash 游戏时代,Y8 是我最喜欢的发行商之一,因为那里的人真的很平易近人,如果你有一个高质量的产品,它将帮助你取得成功。加入 Y8 后,和 Y8 的合作颇有成效。内容团队会给你的游戏提出改进建议,并且将很大一部分收益分享给开发者。以我的经验来说,受欢迎的游戏要达到百万次游戏体验数并不困难。所以如果你正在制作 H5 游戏,我强烈建议你试一下 Y8 的 revenue-sharing program:
https://zh.y8.com/revshare?pk_campaign=SlashTheHordesGit
为什么选择用 Cocos Creator 开发游戏?
Martin:得益于 Cocos Creator 的网页实时预览功能,我们能很方便地调试游戏,加快项目的迭代速度。制作多人联机游戏时,Cocos Creator 能帮助我们节省大量时间,因为引擎拥有很强的跨平台能力,可以同时在多个设备上玩游戏。
你为什么喜欢制作 HTML5 游戏?
Martin:我认为 HTML5 游戏最棒的地方在于「自由」。无论你制作的是什么类型的游戏,都可以在网络上找到你的受众。你不必依赖于某一个集中式应用商店。而且,这类游戏通常体量较小,试错成本较低,因此你能够大胆去尝试一些疯狂的想法,希望游戏能病毒式传播开来!
请和大家介绍一下你的这款游戏吧!
Martin:Slash the Hordes的想法并不标新,灵感主要来源于 Vampire Survivors。在游戏中,玩家将控制一个角色,击杀从四面八方袭来的敌人,极限求生。我们将游戏源码免费分享给大家,希望可以激励更多开发者尝试使用 Cocos Creator 制作游戏,为大家开发和发行游戏提供更多参考与资源。
游戏有哪些技术实现亮点?
Martin:在 Slash the Hordes的研发中,我重点使用了几个工具:
对象池(Object Pool),可更轻松地管理可重用对象。
事件系统(Event System),将逻辑与其他系统(如动画、分析和声音)分离。
模态系统(Modal System),拥有可重复使用的窗口系统。
以对象池为例。该游戏的对象池可以在这里找到:
https://github.com/MartinKral/Slash-The-Hordes/blob/master/assets/Scripts/Services/ObjectPool.ts
要让它工作,你只需要三行代码和一个带有组件的预制件。
要初始化,可以这样调用它:
const enemyPool: ObjectPool<Enemy> = new ObjectPool(enemyPrefab, this.node, 50, "Enemy");
第一个参数是敌人对象的预制件,它应该有一个与对象池类型匹配的组件(在本例中为敌人)。
第二个参数是父节点,所有的子节点将在这里被实例化。
第三个参数是第一个立即实例化的预制件的数量。如果你知道你将经常使用大约 50 个敌人,那么这个数字应该是 50;如果你需要 51 个敌人,对象池仍然可以扩大并为你提供一个新的敌人。这个值只是为了减少游戏过程中引擎的工作量。
第四个参数代表组件的字符串名称,在本例中即是「Enemy」。
初始化后,你可以通过以下方式简单地获得一个新敌人:
const borrowedEnemy: Enemy = this.enemyPool.borrow();
然后:
this.enemyPool.return(borrowedEnemy);
一般来说,对象池的好处在于它大大减少了实例化和后续内存分配、释放的数量。换句话说,它可以显著提高游戏的性能。
这个对象池还能够处理池的扩展,并立即为你提供附加的组件。它在游戏中被多次使用,一个明显的例子在这里:
https://github.com/MartinKral/Slash-The-Hordes/blob/master/assets/Scripts/Game/Items/ItemSpawner.ts
有一些模块我也会在下一个项目中使用——主要是「应用层」方面,可以有一个相机和其他公共服务;一个单独的场景生命周期对象(例如 Game.ts),用来设置游戏并控制场景的流动;此外还有 gameSettings,一个让游戏设计师可以完全控制游戏的单一的数据文件。
Slash the Hordes 还有很大的优化空间,如果大家有任何建议,请随时提交 issue(甚至是 PR)!
感谢 Martin 的分享!点击文末【阅读原文】即可下载游戏源码。
源码下载
https://github.com/MartinKral/Slash-The-Hordes
在线试玩
https://zh.y8.com/games/slash_the_hordes
Y8 官网
https://zh.y8.com/
Cocos Creator 深度支持各大主流平台,开发者可将内容一键发布至 Web/小游戏/原生等平台,实现一次研发、多端触达。伴随引擎技术的多次突破,Cocos 的应用领域已从游戏拓展到智能座舱、XR、虚拟角色、元宇宙等,成为横跨多领域的 3D 引擎,并面向更多行业提供了完整的解决方案。期待看到更多开发者用 Cocos 实现自己的创意想法,创作出更多元、有趣、高质量的作品!