Awesomium XNA FPS Drop

时间:2014-04-17 12:36:35

标签: c# xna frame-rate awesomium

我们正在尝试使用XNA开发游戏。我们决定使用Awesomium进行GUI,因为它易于使用且功能非常强大。然而,我们发现了一个奇怪的问题:

将鼠标悬停在任何表单元素(如输入,按钮,输入等)之后,我们注意到大量的FPS下降到2 fps。另一方面,当我们将鼠标悬停在文本元素(p,div,a等)上时,没有事情发生,一切都按照预期的那样工作(我们有超过400 FPS)。我们发现问题在于isDirty函数(Awesomium :: WebView),因为它总是正确的(当鼠标在表单元素上时)。我不知道它是否是一个原因,但onMouseOut函数永远不会被调用。

有没有人有类似的问题?我们能做些什么呢?

问候,Valker

1 个答案:

答案 0 :(得分:1)

我在Unity 3D项目中使用过Awesomium并且没有这样的问题。 您应该检查onmouseover事件处理程序。

如果您已完成作业,则应该可以从网页加载资源。 因此,直接在chrome中加载页面,并在调用事件时使用console.log('on-mouse-over')获得JS反馈。如果您充斥着那些控制台消息,而不是经常调用事件处理程序,那么您应该首先在浏览器中调试JS。只有在你的AWE客户端加载它。

我将与您分享我与Awesomium的更多经验。

我的建议是尽可能保持JS代码的精简,并尽可能多地将代码卸载到C#。这就是原因。


您可能希望实现C#例程来检查鼠标是否实际位于不透明点(WebView内)或(半透明)区域上,该区域不应阻止对基础的点击对象。当您使用像box-shadow这样的CSS时,您很快就会注意到阴影会在WebView边界周围和内部添加像素。

那些毗邻的像素应该是点击式的。您可能还有非矩形形状或动态下滑UI元素等。因此,如果您处于透明位置,则必须手动检查固定WebView边界。

您还希望C#代码能够处理多个WebView实例的拖放操作,因为每个WebView实例都有自己的全局上下文,并且无法单独处理JS中的跨WebView拖放。

所以你已经实现了所有这些C#代码。

再做一步,从WebView中收取所有UI处理费用。

您应该使用JS来发送/接收来自C#代码的消息,并且应该避免使用复杂的JS脚本。

C#中的相同功能更容易调试。自然出现的是MVC模式,控制器用C#实现。

非常瘦的JS不易出错。

最后但并非最不重要的一点是,如果您是付费客户,您应该利用他们仅限客户的支持和论坛。

祝你好运,尤其是拖拽和噩梦! :)