我正处于游戏开发的早期阶段。我正在使用图像通过在表面上绘制一块较大的图像来创建动画。这是一个代码示例:
void drawNextFrame() {
//surf.canvas().clear();
surf.clear();
float startX = entity.flipH ? entity.width : 0;
float endX = entity.flipH ? -entity.width : entity.width;
float width = entity.width;
float height = entity.height;
//surf.canvas().drawImage(image, 0, 0,
surf.drawImage(image, 0, 0,
width, height,
(width * curFrame) + startX, 0,
endX, height);
}
surf
是表面,SurfaceLayer
是image
资产Image
。该游戏的 Java 版本运行良好,流畅且响应迅速,不会丢帧或出现任何渲染问题。我在使用 HTML 版本时遇到了问题,它看起来很慢并且在动画中丢了很多帧。例如,我有一个循环播放器的运行动画,看起来 HTML 版本在播放器变为空白之前只播放一次动画。跳跃或触发一些其他动画可以修复它,这样我就可以再次播放运行动画,但在将角色变为空白之前,它仍然不会播放动画循环的一次迭代。我也无法surf.clear()
持续发射,有时框架会堆叠在一起。
我已经进行了各种调试,以确保我不会太快地绘制框架。我没有触及paint() 方法。我尝试切换到SurfaceLayer
,CanvasLayer
虽然这似乎稍微改变了我遇到的渲染问题类型以及它们何时发生的行为,但它仍然是一种非常无法播放的体验。此外,例如,当玩家面朝后时,它无法创建我的图像的镜像。我为上面的 Canvas 版本包含了注释掉的代码——在这种情况下surf
是CanvasImage
. 除了绘制这些动画之外,我还在使用 Box2D,如果这会有所不同的话。
我的问题是:这正常吗?我是唯一一个遇到这些类型问题的人吗,有没有人找到解决方法?我只是想确保我没有做错什么并且我正在采取的方法是有效的。
我正在使用 PlayN 1.2 分支的相当现代的机器上使用 Chrome 进行测试。我使用以下命令通过 Maven 从命令行构建和测试我的项目的 HTML 版本:
mvn clean
mvn install
mvn test -Ptest-html
然后我用 Chrome浏览到http://localhost:8080 。
我遇到的另一个问题是刷新页面并不总是重新加载我的游戏。我已经实现了一个 AssetWatcher 以确保在开始之前一切都可用并且它工作一次,通常在我清除浏览器缓存并重新启动 Chrome 之后,但是在那之后如果刷新加载游戏我很幸运。通常我必须重复清除缓存的过程,重新启动浏览器再次测试。
我知道我在没有提供大量代码的情况下提出了很多问题,但是我在 SVN 在线存储库中拥有所有内容,并且很乐意向任何愿意查看的人开放它。
任何帮助表示赞赏!感谢您的时间!