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
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.
Para ser utilizado con moderación; it's not as efficient.
Es un cambio de paradigma.
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.
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);
}
- 1. Desmarcar RadioButton's - método alternativo
- 2. Método de carga alternativo para Django FileField
- 3. C#: Anulación de OnPaint en ProgressBar no funciona?
- 4. WPF: Cómo implementar el joystick como dispositivo de entrada alternativo (C#)
- 5. VB.Net WinForms Form OnPaint() Transparency Refresh
- 6. Método alternativo para PIVOTE - EN con soporte de subconsulta
- 7. Método alternativo para el archivo privado "setAllowsAnyHTTPSCertificate: forHost:" de NSURLRequest
- 8. SendKeys.Send Método en la aplicación WPF
- 9. Ni Invalidar() ni Refresh() invoca OnPaint()
- 10. Hibernate 4.1Final alternativo para Hibernate.STRING
- 11. getExternalFilesDir alternativo en Android 2.1
- 12. alternativo a la función
- 13. ¿Diseñando SQL alternativo?
- 14. Definición de combinador Y alternativo
- 15. Uso de C# web api con contenido alternativo tipo
- 16. ¿Puede una WPF ComboBox mostrar texto alternativo cuando su selección es nula?
- 17. C# WinForms - Preguntas sobre el método de pintura
- 18. Cómo es esto posible: OnPaint procesado en WaitOne
- 19. alternativo para mysql_num_rows utilizando DOP
- 20. ¿Alternativo a cookies de HTTP?
- 21. ¿Alternativo de PowerDesigner gratis/barato?
- 22. pip requirements.txt con índice alternativo
- 23. ¿Texto alternativo para UITableView vacío?
- 24. Nueva línea en texto alternativo
- 25. Usando Homebrew con GCC alternativo
- 26. Probador multifuncional alternativo al sistema.tiempo
- 27. Enhebrado WPF C#
- 28. ¿Es válida esta acusación contra los controles DevExpress WPF y cuál es un buen proveedor alternativo?
- 29. Patrón de diseño alternativo a Coroutines
- 30. WPF/C#: WPF Path Maker Tool/Muestra?
no quiero forzar una tecnología en el proyecto. Si WPF no es una alternativa adecuada, puedo aceptarlo. –
¿Por qué los formularios son más apropiados para juegos que WPF? –
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. –