我有一款我为 Windows 制作的游戏,它运行得很好(你可以在 itch.io 上看到 这里),我想看看能否让它在 HTML5 上运行,或者至少做一个精简的 HTML5 演示来宣传 Windows 版。但虽然 Windows 版可以一次处理超过 1000 个敌人,HTML5 版如果超过大约 40 个,FPS 就会下降并且永远回不来。即使相机视野中没有任何敌人,FPS 仍会持续下降。

过去几天我一直在疯狂尝试弄出到底是什么导致它变慢,我尝试的所有优化措施都没有效果。直到我移除敌人的动画——为了让它们看起来有点抖动,我让它们的 image_xscale 和 image_yscale 在几帧内随机变化。它们不再做动画后,FPS 长时间保持在 60。 (显然 HTML5 版不能像 Windows 版那样处理那么多敌人,但现在它表现好得多,即使有大量敌人存在且 FPS 下降,只要让玩家跑开它们,使它们不在屏幕上,FPS 就会恢复)。

我想可能是改变图像缩放导致碰撞检测变慢,所以我把 image_xscale 和 image_yscale 保持不变,使用自定义的 draw_xscale 和 draw_yscale 变量来改变绘制时的大小,同时保持碰撞掩码不变——结果 FPS 下降依然出现。实际上,仅仅是需要在多种缩放下绘制同一个敌人精灵,导致 HTML5 版本卡顿。

我知道在 HTML5 中使用不同的 image_blend 会为每种颜色生成新的精灵图,那么不同的图像缩放是否会产生同样的效果?游戏是否因几百种略有不同尺寸的图像而崩溃?我从未读到过相关内容。