2010-07-27 6 views
6

В C# WinForms, когда вы делаете небольшую игру здесь или там, я бы написал быстрый класс, который был подклассом в System.Windows.Forms.Panel и в конструкторе, установив DoubleBuffered в true. Затем вы можете переопределить метод OnPaint для отображения элементов игры. Я сделал это уже 2 или 3 года, но я действительно пытаюсь использовать WPF и XAML, мне очень нравится его регулярные макеты приложений. Какой эквивалент можно сделать в WPF?C# WPF метод OnPaint альтернативный?

ответ

3

Не ответ, который вы ищете, но: вы не должны использовать WPF для игр. Stick с формами (которые не будут сбрасываться MS, поскольку WPF не заменяет Forms) или попробуйте XNA, если вы хотите перейти на следующий уровень.


UPDATE: Я ответил на этот вопрос очень быстро вчера, потому что я был в спешке и, потому что я также смотрел в WPF, чтобы сделать игры, так что я не хотел покинул OP без надлежащего ответа.

Вот сделка:

WPF цель состоит в том, чтобы упростить богатую разработку пользовательского интерфейса. Во-первых, MS понимает, что форма способа кодирования смешивания поведение с Презентация. Это плохо, как для дизайна приложения, так и для ремонтопригодности. Кроме того, в Формах все должно быть закодировано; Сама библиотека делает очень мало для пользователя. Например, если вы хотите, чтобы кнопка имела другой внешний вид, вы должны переопределить ее метод Draw, а затем каким-то образом нарисовать любую графику, которая представляет ее.

С WPF, Поведение отделено от презентации. Например, что такое кнопка? В окнах мы знаем, что это коробка с закругленными углами, но оглядитесь ... ваш прокрутка мыши также является кнопкой, хотя она не похожа на кнопку Windows по умолчанию. Быть кнопкой означает наличие определенного поведения (нажатие, в основном), не похожее на коробку. С WPF это очень просто. Вы определяете кнопку, а затем используете, скажем, изображение или текст, чтобы представить его пользователю.

Все это происходит за счет, конечно; например, WPF работает медленнее, чем Forms. Игры должны быть быстрыми и стараться не тратить ресурсы. В играх каждое поведение, как правило, кодируется (а не пользовательский интерфейс, конечно), каждая презентация настраивается (2D-графика или 3D-объект), поэтому вам все равно придется делать много кодирования. Таким образом, вы используете дорогую технологию, но отбрасываете большую часть своих преимуществ.

Но я не специалист. Вы можете проверить блог this, где бывший сотрудник Microsoft пытался в течение почти двух лет использовать WPF для игр. И он заключает:

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

Оттуда я сделал большинство моих выводов.

+1

Я не хочу, чтобы заставить технологию на проект. Если WPF не является подходящей альтернативой, я могу согласиться с этим. –

+1

Почему формы более подходят для игр, чем WPF? –

+2

Другой блоггер, очевидно, сравнивал WPF с XNA/DirectX, а не с формами. Ни WPF, ни Forms не жизнеспособны для «серьезных» игр, но я не покупаю, что Forms медленнее WPF. Формы не предлагают * никакого * аппаратного ускорения, и, если вы хотите сделать какой-либо специальный рендеринг, вы все равно будете рисовать свои собственные пиксели на ЦП. Если вы не жонглируете тысячами экранных объектов (которые вам не нужно делать, если вы используете кисти), WPF, как правило, быстрее. Плюс, WPF предлагает шейдеры и аппаратное ускорение для практически всех - черепицу, изменение размера, вы называете это. –

1

Есть несколько контейнеров для отображения материала. Тот, который вы хотите использовать, - это холст (единственный с системой координат) some more details

Ключ в том, какую игру вы занимаетесь. Используя xaml, это может быть какая-то базовая игра, похожая на приложение (основные рисунки и т. Д.). Для чего-то еще рассмотрим использование XNA. Преимущество xaml заключается в том, что с пользователем можно легко взаимодействовать с пользователем, т. Е. Просто написать строку на экране, что немного сложнее для XNA. Кроме того, использование xmal u может сделать игру для IE (XABP), Windows Phone и Silverlight.

Что вы делали с формой - это немного игра в стиле петли.

Обновление(); Краска();

и это подходит XNA больше. Но если вы хотите использовать WPF и Xaml, используйте Canvans и LayoutUpdate Handler.

0

Вы можете попробовать добавив окна формы пользовательского элемента управления внутри WPF, используя множество WinForms и рисунок там, используя OnPaint

//WPF XAML 
<WindowsFormsHost x:Name="formsHost" HorizontalAlignment="Left" Visibility="Visible" Grid.Column="0" Grid.Row="0"></WindowsFormsHost> 


//WPF CodeBehind 
YourCustomWinFormsControls panel = new YourCustomWinFormsControls(); 
     panel.Width = XXX; 
     panel.Height = XXX; 
     formsHost.Child = panel; 

//WinForms Custome Control Code 

protected override void OnPaint(PaintEventArgs pe) 
    { 
     //DO STUFF HERE 
     base.OnPaint(pe); 
    }