Несколько форм и одно обновление, это будет работать? - PullRequest
0 голосов
/ 17 сентября 2008

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

  1. Имейте одну форму и добавляйте / удаляйте элементы управления вручную, затем используйте любой из игровых трюков.
  2. Создание различных форм с элементами управления и вызовом update и application.doEvents () в главном потоке. [While (isAppRunning) {UPDATE () Application.DoEvents ()}
  3. Создайте обновление - закрашивайте цикл в каждой форме, как требуется.
  4. Любые другие идеи.

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

1 Ответ

1 голос
/ 17 сентября 2008

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

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

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

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

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

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

НТН!

...