HTML渲染和速度问题

时间:2012-05-01 02:36:22

标签: playn

我正处于游戏开发的早期阶段。我正在使用图像通过在表面上绘制一幅较大的图像来创建动画。这是一个代码示例:

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);
}

surfSurfaceLayer的表面,imageImage资产。这个游戏的Java版本运行得非常好,它平滑且反应灵敏,不会丢弃任何帧或有任何渲染问题。虽然我在使用HTML版本时遇到了麻烦,但它似乎很慢并且在动画中丢失了很多帧。例如,我有一个循环播放器的运行动画,似乎HTML版本只在播放器变空之前播放动画一次。跳转或触发其他一些动画可以修复它,这样我就可以再次播放动画动画,但在将字符变为空白之前,它仍然不会播放动画循环的一次迭代。我也遇到了surf.clear()持续射击的问题,有时候帧堆叠在一起。

我已经做了各种调试,以确保我没有画太快的画框。我没有接触paint()方法。我尝试为SurfaceLayer切换CanvasLayer,虽然这似乎改变了我所处理的渲染问题的类型以及发生时的行为,但它仍然是一种非常难以置信的体验。此外,例如,当玩家面向后方时,未能创建我的图像的镜像。我在上面添加了Canvas版本的注释掉的代码 - 在这种情况下,surfCanvasImage的实例。除了绘制这些动画之外,我还在使用Box2D,如果这会产生影响的话。

我的问题是:这是正常的吗?我是唯一一个遇到这类问题的人,并且有人找到了解决方法吗?我只是想确保我没有做错什么,我正在采取的方法是有效的。

我在一台相当现代的机器上使用Chrome进行测试,该机器具有PlayN的1.2分支。我使用以下命令从命令行通过Maven构建和测试我的项目的HTML版本:

mvn clean
mvn install
mvn test -Ptest-html

然后我使用Chrome浏览到http://localhost:8080

我遇到的另一个问题是刷新页面并不总是重新加载我的游戏。我已经实现了一个AssetWatcher,以确保在启动之前一切都可用,它通常在我清除浏览器缓存并重新启动Chrome之后运行一次,但之后我很幸运,如果刷新加载了游戏。通常我必须重复清除缓存的过程,重新启动浏览器再次测试它。

我知道我在没有提供大量代码的情况下提出了很多问题,但我在网上有一个SVN存储库中的所有内容,很乐意将它打开给任何愿意看的人。

任何帮助表示赞赏!谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

您是否看过PlayN样本?特别是CuteGame,似乎可能是相关的。参见: