Windows Phone 7 Web浏览器更新速度太快

时间:2012-02-13 04:03:51

标签: javascript silverlight-4.0 windows-phone-7.1 windows-phone-7

我有一个带有XNA应用程序的Windows Phone 7 Silverlight。 我也使用一种服务,它使用javascript将动态图像渲染到屏幕上。

在PC上,javascript流畅而流畅,我可以平滑地在图像和过渡之间跳转。但是,我需要将此功能带到手机上。

截至目前,我已成功使用Silverlight中的Web浏览器控件加载我的HTML文件并执行脚本。问题是,一旦应用程序的“动态”部分启动,Web控件就不能足够快地更新。而不是PC版本导致的平滑滑动动画,我得到了口吃,类似于游戏中的低FPS。

所以,我想知道:有没有办法提高网页浏览器控件的更新率?

我曾经有过(但实际上没有成功)的另一个想法是在应用程序的XNA页面中嵌入一个Web浏览器并使用XNA的更新速率,这个速度要高得多(我猜是标准的60) FPS)。但是,Silverlight Web浏览器控件似乎没有更新呈现功能,我找不到一个库来嵌入XNA应用程序本身的Web浏览器。

有没有人知道我如何使用javascript来获取流畅而流畅的动态HTML文件?

修改 使用30 FPS的计时器的webBrowser.InvalidateArrange()似乎加快了浏览器的刷新速度,但它仍然是跳跃式的。如果我尝试增加FPS,浏览器会恢复为慢速。

2 个答案:

答案 0 :(得分:0)

  

我猜是标准的60 fps

标准是30 FPS

  

我找不到一个库来嵌入XNA应用程序本身的Web浏览器。

我认为它不会有任何改进。

  

所以,我想知道:有没有办法提高a的更新率   网页浏览器控件?

  1. 制作一个主页上只有Web浏览器控件的测试应用程序 - 确保除了Web控件之外没有任何东西可以占用资源。
  2. 查看应用的效果。如果用户使用“动态”部分
  3. ,则可以减少应用中的任何其他处理
  4. 如果性能仍然很差,那么你唯一能做的就是优化javascript本身
  5. 如果仍然无法接受,请删除该功能或制作原生功能。
  6. 利润!

答案 1 :(得分:0)

使用设置为17毫秒(60 FPS)的计时器我强制浏览器失效,这会导致重绘。除此之外,我还删除了浏览器不需要重绘的框架。

    DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();
    timer.Interval = new TimeSpan(0, 0, 0, 0, 17); // 30 FPS 
    timer.Tick += new EventHandler(timer_Tick);
    timer.Start();

    void timer_Tick(object sender, EventArgs e)
    {
        if (loaded && coded && needToUpdate)
        {
                webBrowser.InvokeScript("setPitch", pitch.ToString());
                webBrowser.InvokeScript("setHeading", heading.ToString());
                Redraw();

                needToUpdate = false;
        }
    }

    void Redraw()
    {
        webBrowser.InvalidateMeasure();
        webBrowser.InvalidateArrange();
        webBrowser.Visibility = System.Windows.Visibility.Visible;
    }