Estoy escribiendo un juego usando C# 2010 y XNA 4.0. Quiero que sea un buen juego y no una "mierda más" y uno de mis objetivos es una buena velocidad de fotogramas. Para esto, me gustaría pedirle algunos consejos, ya sea relacionados con XNA o relacionados con C#, qué puedo hacer para acelerar mi código y así mejorar el FPS.XNA game performance
Aquí es algunas cosas que descubrí:
- (C#) usando
array
insted delist<>
mejorará mucho el rendimiento, en caso de que quiera acceder a la enorme cantidad de datos (o incluso lotes: tiene una matriz de 20000 artículos dio casi el 180% de FPS de la lista de 20000. - (C#) usando
for
en lugar deforeach
mejorará el rendimiento. Por mismos 20000 elementos es como la diferencia 5-10%. - (XNA y C#) métodos de llamada costos de rendimiento, así que cuando dispersé mi código en meth Puso lo que se llamaba otros métodos y demás, y todo fue tan genial y orientado a objetos que fue en el costo de 1-3 FPS cada llamada.
- (XNA) vs. actualización sorteo: no fue una diferencia en el rendimiento cuando pongo código en la actualización() y draw(), así que si no te importa mucho, usted no tiene que poner algunos métodos en la actualización() en lugar de mantener todo junto en draw() con la esperanza de un mejor FPS.
- (XNA) ni idea de si se trata de mí o simplemente 4.0, pero cuando se carga un .X con muchas texturas en ella y mallas bastante complejas, se tarda mucho tiempo en cargar. Tuve que escribir mi propio cargador .X y renderizador de malla/modelo simplemente porque XNA comenzó a cargar la textura para cada triángulo independientemente de si el anterior tenía la misma textura. Incluso escribir mi propio cargador de contenido que almacena texturas en caché para usted no es una solución, porque todavía se utiliza muchas veces. Si haces algo agradable y esponjoso, sugiero usar
drawuserprimitives
y noModel
clase. (Ni idea de si es 4.0 solamente, o 3,1 tenido tal problema de rendimiento también) - (XNA y C#) Trate de evitar el uso de "nuevo" cuando se trata de dibujo. Vi un código en la web, lo que se copió/pegó y tenía "basicEffect = new BasicEffect (graphicsDevice);" y tal fealdad en el sorteo(), y aún peor: en las iteraciones dentro de draw(). Tal matará el rendimiento. En lugar de esto, tenga una de esas clases en "juego" o en una clase estática. Esto se aplica a otros "objetos temporales" también: feo, pero creo que es mejor crear algo global y usarlo con atención para luego crear un código agradable y esponjoso que hará nuestro juego debido al recolector de basura.
Ok, así que para hacer el cuento largo, por favor enviar un buen consejo aquí, así que puedo/podemos hacer juegos buenos, rápidos y optimizados;)
Gracias de antemano: Zéiksz
Parece un buen candidato para CW :) – BlackBear
Recomiendo hacer de este un wiki de la comunidad. – Ben
No creo que usar una arquitectura OOP sólida cuesta 1-3 fps cada llamada ... – Blindy