【问题标题】:Phonegap canvas low refresh ratePhonegap画布低刷新率
【发布时间】:2014-03-06 16:07:19
【问题描述】:

我正在构建一个基于画布的网络游戏,它在桌面上以 60fps 的速度运行 chrome。它还在 android 上的 chrome 中以 60fps 的速度运行。我将它加载到 phonegap 应用程序中,fps 仪表仍显示 60fps,但屏幕每隔几个刻度才会绘制一次。是否有一个刷新率限制器强制 webview 每秒只绘制一次左右?即使网站说它以 60fps 的速度重绘,还有哪些其他因素会限制我的绘图?

【问题讨论】:

  • 也许你用下面的插件会有更好的性能(需要全屏画布,不实现所有画布功能)github.com/phonegap/phonegap-plugin-fast-canvas
  • 您是否使用requestAnimationFrame 控制重绘?
  • 我会研究 fastcanvas,但我希望我不必这样做。是的,我正在使用 requestanimationframe

标签: javascript android performance canvas cordova


【解决方案1】:

默认情况下,PhoneGap 将使用内置的默认浏览器,它不是 chrome,除非您使用的是 KitKat,但那是另一回事。

现在我自己在使用默认浏览器时遇到了问题,即使是在获取用户签名之类的小型画布项目中,但这是由于 touchevent 触发率低...

无论如何,可能的解决方案是强制 phonegap 使用 WebChromeClient 而不是默认的,您可以通过在 super.loadUrl 调用之前添加以下行来做到这一点:

appView.setWebChromeClient(new WebChromeClient());

如果您确实强制使用 WebChromeClient,请确保您确实启用了 javascript、本地存储(如果需要)等等。一些PhoneGap插件也可能会损坏。如果您的游戏是纯 HTML5,我建议您考虑不为您的 android 版本使用 phonegap,构建一个简单的 WebView 应用程序在 Android 中非常容易。

另外,如果您的游戏打算使用加速度传感器,请查看对浏览器的原生支持:Can I Use resources

我也一定会阅读THISTHIS

希望它有所帮助。 埃米尔

【讨论】:

  • 这是一个非常有趣的回复。作为记录,我正在使用 kitkat。它在 webview 中运行 chrome。奇怪的是它在 phonegap 之外以 60fps 运行,在 phonegap 内以 60fps 运行(通过 xStats 输出),唯一的区别是它只是以大约 2fps 的速度对我进行物理重绘。我没有看到phonegap上方的其他抽象层吗?这是canvas在phonegap中缺乏某些能力的常见行为吗?
  • 是的,恐怕是这样,我做了进一步的阅读,这似乎是 PhoneGap 的问题,无法为确切的原因提供资金。看起来即使是 Andorid 4.4 默认浏览器也不支持 WebGl,而 Chrome 支持(在浏览器上打开 Chrome 并输入:about://gpu)。您可以尝试强制 GPU,此处揭示了技巧:davidwalsh.name/translate3d。为了能够为您提供更精确的文档,我进行了进一步挖掘,我可以确认即使 KitKat Chromium 支持的 webview 也不支持 WebGL(请参阅:buff.ly/JjQSm8
  • 说了这么多,放在一起,我认为您应该尝试寻找替代解决方案。 QuickFix 建议的 FastCavans 或我自己建议的 Intel XDK(我现在正在下载以试玩)。另外我忘了提一下,它看起来 100% 愚蠢,但请确保您在清单 中启用了硬件加速
  • 非常感谢 Emil 的努力。享受赏金:-)
【解决方案2】:

遗憾的是,新的 Webview 没有与 Chrome 相同的所有功能。这些差异之一是 Chrome 使用的 WebGL 3D 画布。请参阅here,了解新 Webview 和 Chrome 之间的功能差异列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    相关资源
    最近更新 更多