Sto analizzando il mio semplice gioco 2D XNA. Ho scoperto che il 4% dell'intero tempo di esecuzione è preso da un semplice operando di sommare due colori, uno dei quali moltiplicato per float.Ottimizza la manipolazione del colore su XNA
Ho bisogno di chiamare questo metodo rogulthy 2000 volte per frame (per ogni tile sulla mappa), che mi ha dato 120000 volte al secondo per i 60 fps di XNA. Anche l'aumento minimo della singola chiamata potrebbe dare un enorme impatto sulla velocità. Eppure semplice non so come posso fare questo più efficace
private void DoColorCalcs(float factor, Color color)
{
int mul = (int)Math.Max(Math.Min(factor * 255.0, 255.0), 0.0);
tile.Color = new Color(
(byte)Math.Min(tile.Color.R + (color.R * mul/255), 255),
(byte)Math.Min(tile.Color.G + (color.G * mul/255), 255),
(byte)Math.Min(tile.Color.B + (color.B * mul/255), 255));
}
EDIT: Come suggerito da Michael Stum:
private void DoColorCalcs(float factor, Color color)
{
factor= (float)Math.Max(factor, 0.0);
tile.Color = new Color(
(byte)Math.Min(tile.Color.R + (color.R * factor), 255),
(byte)Math.Min(tile.Color.G + (color.G * factor), 255),
(byte)Math.Min(tile.Color.B + (color.B * factor), 255));
}
Questa abbassata e getta dal 4% al 2,5%
La parola che stai cercando è ottimizzare, non ottimizzare. :) – jalf
Sembra un sacco di chiamate per un semplice gioco 2D. Non puoi invece cambiare l'algoritmo generale? Ad esempio memorizzando i risultati o evitando di fare tutto ogni frame? – Jan
Ho bisogno di ricalcolare le luci dinamiche per le tessere (il mio modello di illuminazione include lo sfarfallio della luce, che cambia l'intensità della luce al tasso Sin (tempo) * 0,1 per una tessera data in ogni fotogramma) – PiotrK