Падение частоты кадров Awesomium XNA FPS

Мы пытаемся разработать игру с использованием XNA. Мы решили использовать Awesomium для графического интерфейса, потому что он прост в использовании и чрезвычайно мощен. Однако мы обнаружили странную проблему:

После наведения на любые элементы формы (такие как ввод, кнопки, ввод и т. д.) мы заметили значительное падение FPS примерно до 2 кадров в секунду. С другой стороны, когда мы наводим курсор на текстовые элементы (p, div, a и т. д.), ничего не происходит, и все работает как положено (у нас более 400 кадров в секунду). Мы обнаружили, что проблема связана с функцией isDirty (Awesomium::WebView), потому что она всегда верна (когда мышь находится над элементом формы). Я не знаю, может ли это быть причиной, но функция onMouseOut никогда не вызывается.

У кого-нибудь есть похожая проблема? Что мы можем с этим поделать?

Привет, Валкер.


person Valker    schedule 17.04.2014    source источник


Ответы (1)


Я использовал Awesomium в проекте Unity 3D, и у меня не было подобных проблем. Вы должны проверить обработчик события onmouseover.

Если вы сделали свою домашнюю работу, вы сможете загрузить активы с веб-страницы. Поэтому загрузите страницу прямо в Chrome и используйте console.log('on-mouse-over'), чтобы получить обратную связь JS при вызове события. Если вы завалены этими консольными сообщениями, обработчик событий вызывается слишком часто, и вам следует сначала отладить свой JS в браузере. Только после этого загрузите его в свой клиент AWE.

Я поделюсь с вами своим опытом работы с Awesomium.

Я рекомендую делать код JS как можно более тонким и выгружать как можно больше кода на C#. Вот почему.


Вы, вероятно, захотите реализовать подпрограммы C#, чтобы проверить, действительно ли мышь находится в непрозрачном месте (внутри WebView) или в (полу-)прозрачной зоне, которая не должна препятствовать переходу по нижележащим объектам. Когда вы используете CSS, например box-shadow, вы скоро заметите, что тень добавляет пиксели вокруг и внутри границы WebView.

Эти граничные пиксели должны быть кликабельными. У вас также могут быть непрямоугольные формы или динамические выдвигающиеся элементы пользовательского интерфейса и тому подобное. Таким образом, вам придется обойти фиксированные границы WebView, проверяя вручную, находитесь ли вы в прозрачном месте или нет.

Вы также хотите, чтобы код C# обрабатывал перетаскивание между несколькими экземплярами WebView, поскольку каждый из них имеет свой собственный глобальный контекст, и нет возможности обрабатывать перетаскивание между WebView только в JS.

Итак, у вас уже реализован весь этот код C#.

Просто сделайте еще один шаг и снимайте всю обработку пользовательского интерфейса с WebView.

Вы должны использовать JS только для отправки/получения сообщений из кода C#, и следует избегать сложных сценариев JS.

Ту же функциональность в C# гораздо проще отлаживать. И естественным образом возникает шаблон MVC с контроллерами, реализованными на C#.

Очень тонкий JS менее подвержен ошибкам.

И последнее, но не менее важное: если вы являетесь платным клиентом, вам следует воспользоваться их поддержкой и форумами только для клиентов.

Желаю вам удачи, особенно с кошмаром перетаскивания! :)

person pid    schedule 17.04.2014
comment
Спасибо за ответ :) После вашего ответа я снова проверил каждую строку в нашем проекте и нашел причину: D Проблема была в том, что мы вызывали WebCore.Update() при каждом обновлении XNA, и это вызывало падение частоты кадров: D - person Valker; 17.04.2014
comment
У меня вопрос по поводу такой интеграции: как вы обрабатываете ввод с клавиатуры и такие действия, как копирование и вставка или выделение всего (CTRL+A)? - person Not Important; 27.04.2014
comment
Извините, Фабио, за этот ОЧЕНЬ поздний ответ, но я вообще не заметил вашего вопроса. Все сочетания клавиш (CTRL+A/C/V) должны работать точно так же, как и в вашем браузере прямо из коробки. На самом деле мне пришлось реализовать код JS, чтобы подавить выделение нежелательного текста. - person pid; 22.07.2014