Несколько форм и одно обновление - сработает ли это?

StackOverflow https://stackoverflow.com/questions/85925

  •  01-07-2019
  •  | 
  •  

Вопрос

Мне нужно создать приложение в .NET CF с разными / отдельными формами с большим количеством рисунков / анимации в каждой форме.Я бы предпочел иметь единую функцию обновления [мое собственное для управления состояниями и так далее], чтобы я мог управлять различными состояниями, чтобы мой [игровой код J2ME] работал без особых изменений.Я пришел к нескольким возможным сценариям.Какой из них будет идеальным?

  1. Создайте единую форму и добавляйте / удаляйте элементы управления вручную, затем используйте любой из приемов gamelooping.
  2. Создайте разные формы с элементами управления и вызовите update и application.DoEvents() в главном потоке.[ while(isAppRunning){ ОБНОВИТЬ() приложение.DoEvents() }
  3. Создайте цикл обновления - рисования для каждой формы по мере необходимости.
  4. Есть еще какие-нибудь идеи.

Пожалуйста, дайте мне предложение относительно этого

Это было полезно?

Решение

Если это игра, то я бы отбросил большинство форм и работал с самым необходимым, обработал растровое изображение, если это возможно, и отрисовал его, либо переопределив метод рисования основной формы, либо элемент управления, который находится внутри нее (возможно, панель).Это повысит вашу производительность.

Основная проблема заключается в том, что compact framework на самом деле не предназначен для большого удовольствия от пользовательского интерфейса, вы не получаете двойную буферизацию бесплатно, как в full framework, надлежащая прозрачность - это сука, связанная с элементами управления WinForm, и если вы слишком долго будете держаться за поток пользовательского интерфейса, вы получите серьезные сбои рендеринга.Черт возьми, вы даже можете получить их, если будете слишком много работать в фоновых потоках!:O

Вы никогда не получите оптимальной производительности от явного вызова приложения.DoEvents, мое эмпирическое правило - использовать это только при устранении неполадок или написании небольших хаков в пользовательском интерфейсе.

Возможно, стоит поместить игру в фоновый поток, а затем вызвать.Вызовите элемент управления, чтобы вернуться к основному потоку пользовательского интерфейса для обновления вашего дисплея, оставляя пользовательскому интерфейсу достаточно времени для ответа, а также для обработки пользовательского ввода.Пользовательский ввод - еще одна причина, по которой я избегаю обычных элементов управления winform, поскольку мобильные устройства обычно не имеют большого количества клавиш, очень полезно иметь возможность переназначать их, поэтому я обычно избегаю таких вещей, как текстовые поля, в которых заданы ключевые события / ответы.

Я бы также избегал использования разных форм, поскольку отображение новой формы может привести к небольшой паузе, я обычно меняю элементы управления на основную форму, чтобы избежать этой проблемы при написании бизнес-программного обеспечения.

В конце концов, вероятно, стоит поэкспериментировать с различными техниками, чтобы увидеть, что получается лучше всего.Также посмотрите, сможете ли вы получить какие-либо советы от людей, которые разрабатывают игры на CF, поскольку я обычно занимаюсь только программным обеспечением для бизнеса.

ХТХ!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top