Несколько форм и одно обновление - сработает ли это?
-
01-07-2019 - |
Вопрос
Мне нужно создать приложение в .NET CF с разными / отдельными формами с большим количеством рисунков / анимации в каждой форме.Я бы предпочел иметь единую функцию обновления [мое собственное для управления состояниями и так далее], чтобы я мог управлять различными состояниями, чтобы мой [игровой код J2ME] работал без особых изменений.Я пришел к нескольким возможным сценариям.Какой из них будет идеальным?
- Создайте единую форму и добавляйте / удаляйте элементы управления вручную, затем используйте любой из приемов gamelooping.
- Создайте разные формы с элементами управления и вызовите update и application.DoEvents() в главном потоке.[ while(isAppRunning){ ОБНОВИТЬ() приложение.DoEvents() }
- Создайте цикл обновления - рисования для каждой формы по мере необходимости.
- Есть еще какие-нибудь идеи.
Пожалуйста, дайте мне предложение относительно этого
Решение
Если это игра, то я бы отбросил большинство форм и работал с самым необходимым, обработал растровое изображение, если это возможно, и отрисовал его, либо переопределив метод рисования основной формы, либо элемент управления, который находится внутри нее (возможно, панель).Это повысит вашу производительность.
Основная проблема заключается в том, что compact framework на самом деле не предназначен для большого удовольствия от пользовательского интерфейса, вы не получаете двойную буферизацию бесплатно, как в full framework, надлежащая прозрачность - это сука, связанная с элементами управления WinForm, и если вы слишком долго будете держаться за поток пользовательского интерфейса, вы получите серьезные сбои рендеринга.Черт возьми, вы даже можете получить их, если будете слишком много работать в фоновых потоках!:O
Вы никогда не получите оптимальной производительности от явного вызова приложения.DoEvents, мое эмпирическое правило - использовать это только при устранении неполадок или написании небольших хаков в пользовательском интерфейсе.
Возможно, стоит поместить игру в фоновый поток, а затем вызвать.Вызовите элемент управления, чтобы вернуться к основному потоку пользовательского интерфейса для обновления вашего дисплея, оставляя пользовательскому интерфейсу достаточно времени для ответа, а также для обработки пользовательского ввода.Пользовательский ввод - еще одна причина, по которой я избегаю обычных элементов управления winform, поскольку мобильные устройства обычно не имеют большого количества клавиш, очень полезно иметь возможность переназначать их, поэтому я обычно избегаю таких вещей, как текстовые поля, в которых заданы ключевые события / ответы.
Я бы также избегал использования разных форм, поскольку отображение новой формы может привести к небольшой паузе, я обычно меняю элементы управления на основную форму, чтобы избежать этой проблемы при написании бизнес-программного обеспечения.
В конце концов, вероятно, стоит поэкспериментировать с различными техниками, чтобы увидеть, что получается лучше всего.Также посмотрите, сможете ли вы получить какие-либо советы от людей, которые разрабатывают игры на CF, поскольку я обычно занимаюсь только программным обеспечением для бизнеса.
ХТХ!