2010-07-27 20 views
6

En C# WinForms cada vez que hacía un pequeño juego aquí o allá, escribía una clase rápida que era una subclase de System.Windows.Forms.Panel y en el constructor, estableciendo DoubleBuffered en true. Luego, puede anular el método OnPaint para mostrar los elementos del juego. He hecho esto durante 2 o 3 años, pero realmente estoy tratando de adoptar WPF y XAML, realmente me gusta para diseños de aplicaciones regulares. ¿Qué equivalente hay para hacer esto en WPF?C# Método alternativo WPF OnPaint?

Respuesta

3

No es la respuesta que busca, pero: no debe usar WPF para juegos. Quédate con Forms (que no será abandonado por MS, ya que WPF no reemplaza a los Formularios) o prueba con XNA si deseas pasar al siguiente nivel.


ACTUALIZACIÓN: respondí la pregunta muy rápidamente ayer, porque yo estaba en un apuro y porque yo también miraba en WPF con el fin de hacer juegos, por lo que no quería a la izquierda de la OP sin la respuesta adecuada.

Este es el trato:

objetivo WPF es para simplificar el desarrollo de interfaz de usuario rica. En primer lugar, MS entendió que Formas de codificación de la forma comportamiento con presentación. Esto es malo, tanto para el diseño de la aplicación como para la mantenibilidad. Además, en Forms, todo tiene que estar codificado; La biblioteca en sí misma hace muy poco por el usuario. Por ejemplo, si desea un botón que tenga un aspecto diferente, debe anular su método Draw y, de alguna manera, dibujar el gráfico que lo represente.

Con WPF, comportamiento se separa de la presentación . Por ejemplo, ¿qué es un botón? En Windows, sabemos que es una caja con esquinas redondeadas, pero mire a su alrededor ... el desplazamiento del mouse también es un botón, aunque no se parece en nada al botón predeterminado de Windows. Ser un botón significa tener un comportamiento específico (hacer clic, sobre todo), no parecer una caja. Con WPF, esto es muy simple. Define un botón y luego usa, por ejemplo, una imagen o un texto, para presentarlo al usuario.

Todo esto tiene un costo, por supuesto; por ejemplo, WPF es más lento que Forms. Los juegos deben ser rápidos y tratar de no desperdiciar recursos. En los juegos, cada comportamiento tiende a estar codificado (no la interfaz de usuario, por supuesto), cada presentación es personalizada (un gráfico en 2D o un objeto en 3D), por lo que tendrá que hacer mucha codificación de todos modos. Por lo tanto, está utilizando una costosa tecnología , pero descarta la mayoría de sus beneficios.

Pero no soy un especialista. Puede consultar el blog this, donde un ex empleado de Microsoft intentó, durante casi dos años, usar WPF para juegos. Y concluye:

Probablemente hayas notado que el blog no se ha actualizado desde hace tiempo. El rendimiento de WPF no parece ser allí para juegos serios, y tengo tirado en la toalla y trabajaré en juegos usando XNA. Simplemente no creo que valga la pena luchar contra el marco WPF ...

De ahí saqué la mayoría de mis conclusiones.

+1

no quiero forzar una tecnología en el proyecto. Si WPF no es una alternativa adecuada, puedo aceptarlo. –

+1

¿Por qué los formularios son más apropiados para juegos que WPF? –

+2

El otro blogger obviamente estaba comparando WPF con XNA/DirectX, no con Forms. Ni WPF ni Forms son viables para juegos "serios", pero no creo que Forms sea más lento que WPF. Forms no ofrece * ninguna * aceleración de hardware, y, si desea hacer algún tipo de renderizado especial, de todos modos va a dibujar sus propios píxeles en la CPU. A menos que haga malabarismos con miles de objetos en pantalla (que no debería tener que hacer si usa pinceles), WPF generalmente es más rápido. Además, WPF ofrece sombreadores y aceleración hardware hardware para prácticamente todo: mosaico, cambio de tamaño, lo que sea. –

1

Hay algunos contenedores para mostrar cosas. El que te gustaría usar es un Canvas (el único con sistema de coordenadas) some more details

La clave es qué tipo de juego estás haciendo. Usar xaml podría ser un juego básico similar a una aplicación (dibujos básicos, etc.). Para algo más, considere usar XNA. La ventaja de xaml es que es fácil interactuar con el usuario a través de controladores, es decir, es fácil escribir una cadena en la pantalla que es un poco más difícil para XNA. También con xmal puedes crear un juego para IE (XABP), Windows Phone y Silverlight.

Lo que estabas haciendo con form es un juego un poco al estilo loop.

Actualizar(); Pintura();

y esto se ajusta a XNA más. Pero si quiere usar WPF y Xaml use Canvans y LayoutUpdate Handler.

0

Usted puede intentar agregar un control de Windows Forms personalizada dentro de la WPF usando un host de Windows Forms y el dibujo no usando 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); 
    } 
Cuestiones relacionadas