busco un problema de rendimiento en la parte de dibujo de mi código XNA para Windows Phone 7 que occures a veces después de algunos segundos. ¿Hay alguna mejor práctica sobre cómo/cuándo llamar al SpriteBatch. ¿Empezar a dibujar algo? En caso de que se llama para cada par de sprites (en cada clase cuando se extrae el jugador, el fondo, los objetos del fondo, ...) o lo haría un llamamiento en el inicio -> dibujar todo en todas las subclases - ser mejor para el rendimiento?llamar SpriteBatch.Begin() /. Fin()?
Respuesta
No use más de lo necesario, porque Begin() significa preparar el dispositivo para la representación de sprites y Fin() significa restaurar a su estado anterior. Esto puede variar a través de algunos indicadores en Begin() diciéndole que no quiere cambios de estado, y puede complicar su código porque tendría que configurar manualmente algunos estados.
Los cambios de estado del dispositivo son a menudo lentos y debe evitar hacerlo si no es necesario, también pueden interferir con cualquier cosa que haga, por lo que si desea procesar algo que no está en SpriteBatch debe llamar a End(), pero estás renderizando sprites deberías llamarlo una vez para todos los sprites.
Para evitar llamar Fin() para modificar los estados que no aparecen en el sprite anterior, debe llamar a flush() en lugar de Fin(). Esto representa los sprites en cola con las transformaciones actuales y los estados del dispositivo, pero deja intactos los estados. Lo que hace la función End() es llamar a Flush() y restablecer estados particulares establecidos por Begin().
Lo mejor desde el punto de vista del rendimiento es llamar al inicio/finalización solo una vez por Draw(), esto hace que todos los sprites en un lote sean procesados por la tarjeta gráfica al mismo tiempo. Solo deberías usar lotes de sprites múltiples si es necesario. Los ejemplos de cuándo se puede necesitar son:
- desea aplicar un efecto sólo a ciertos sprites, pero no a otros
- usted quiere tomar una captura de pantalla
- que quiere hacer algo más complejo con efectos
¿Alguien puede pensar en otra razón para varios lotes de sprites (principio-> fin)?
- 1. resolución fin Método
- 2. carpa sin fin
- 3. after_create y after_save fin
- 4. fin de middleware Scrapy
- 5. fin ARRAY_AGG PostgreSQL
- 6. VBScript esperado Fin 800A03F6
- 7. Pan Gesto Fin
- 8. Fin de línea portátil
- 9. sin fin ViewPager androide
- 10. vim fin de línea
- 11. Problemas con el fin resolución constructor
- 12. python handle XML sin fin
- 13. Cálculos de fin de mes
- 14. Marcador jQuery horizontal sin fin
- 15. Procedimientos almacenados - Fin de días
- 16. Fin de año con MySQL
- 17. MySQL seleccione Agrupar por fin
- 18. debe poner fin a una página web en ".php" con el fin de ejecutar código PHP?
- 19. fin de la cita clojure.core y fin de la cita de empalme
- 20. Fin de llamada() Después de iniciar una nueva actividad
- 21. error de fin de programa extraño
- 22. Cambio clave de la matriz sin fin
- 23. fin de MySQL por cadena con números
- 24. jQuery: guiones de carga con el fin
- 25. TreeSet para ordenar elementos con el fin
- 26. Identificador de fin de línea en VB.NET?
- 27. Android - Detectar Fin de Presión Larga
- 28. Implementar desplazamiento sin fin en ListView
- 29. Ruby on Rails fin por id
- 30. php fin matriz asociativa llave (no ordenar)
La lista de sobrecargas para comenzar es aquí: http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.spritebatch.begin.aspx Si quieres algo diferente aquí, tales como pasar un efecto personalizado o una matriz de transformación diferente, debe hacer otra llamada. –
Hola, no es capaz de tomar la captura de pantalla de la imagen que están en un sprite específica, pero fue capaz de tomar la captura de pantalla en un sprite diferente. Alguna idea, por qué esto pudo haber sucedido? – nagavamsikrishna
@salsabear, eso suena como material para una nueva pregunta. Si incluye el código en la pregunta, asegúrese de incluir solo las porciones de reasignación. –