2012-01-11 5 views
5

Sto realizzando un semplice gioco 2D per Windows Phone 7 (Mango) utilizzando XNA Framework.Come posso evitare frequenti int/float/doppi cast durante lo sviluppo di un'applicazione XNA?

Ho fatto le seguenti osservazioni:

  • La maggior parte delle operazioni di disegno accetti float s
  • SpriteBatch.Draw accetta un Rectangle che utilizza int s
  • La classe Math accetta double s come parametri e anche restituisce double s

Quindi il mio codice è pieno di caratteri tra int s, float s e double s. È un sacco di tipografie.

C'è un modo per liberarmi di loro o non dovrei preoccuparmene?

Inoltre, queste presentazioni rappresentano una perdita di prestazioni misurabile?

+1

Se possibile, utilizzare la classe XNA 'MathHelper'. Ha alcuni metodi e costanti che sono float. http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.mathhelper%28v=XNAGameStudio.40%29.aspx – SomeWritesReserved

+0

Hm, è molto bello! :) Solo le cose mancanti sono le funzioni trigonometriche. – Venemo

risposta

2

Ho notato anche questo, ma a meno che non si noti una diminuzione della velocità, potrebbe essere considerata una micro-ottimizzazione. La conversione tra float e int è relativamente costosa mentre la conversione tra float e double è economica. Pertanto, ovunque non sia necessario eseguire una conversione da float a int, è possibile evitarla. La trasmissione di tipo è generalmente più economica della conversione effettiva (ad esempio utilizzando Convert.ToInt32). Tuttavia, è improbabile che tutto ciò rappresenti un collo di bottiglia a meno che non lo si esegua molte volte. Inoltre, da this post:

  • float, double e int moltiplicazioni hanno le stesse prestazioni ==> usare il giusto tipo di numero per la vostra applicazione, nessuna preoccupazione
  • il telefono è 4x a 10x più lento rispetto alla PC che utilizzo per sviluppare le mie app ==> test con un telefono reale, non fidarti del PC per le operazioni matematiche
  • le divisioni sono fino a 8 volte più lente delle moltiplicazioni! ==> non utilizzare le divisioni, ad es. tenta di utilizzare 1/a quindi moltiplicare

numeri non ufficiali, ma credo che l'ultimo è piuttosto un metodo accettato. Inoltre, si ritiene che i doppi siano più lenti dei float, ma questo dipende dal sistema su cui è in esecuzione. AFAIK, Windows Phone è ottimizzato per l'utilizzo di doubles, che spiegherebbe la classe Math che accetta quelli.

Tutto sommato, direi che è abbastanza comune vedere che il cast si presenta piuttosto con il framework XNA. Ovviamente, dovrebbe essere evitato quando possibile, ma è improbabile che sia la fonte dei colli di bottiglia per i giochi a meno che non sia necessario eseguirlo spesso, nel qual caso altre aree potrebbero essere più facili da ottimizzare (o potrebbe essere necessaria una riprogettazione della struttura del gioco).

+0

Grazie per la tua risposta! :) Sono nuovo di XNA e in qualche modo mi sentivo "colpevole" da tutte quelle tipografie. E sì, sto testando su un telefono reale (un Nokia Lumia 800), e non vedo alcun problema di prestazioni. – Venemo

0

Se siete preoccupati per la conversione Rettangolo, ci sono sovraccarichi che prendono Vector2 del posto, che sono float-based:

http://msdn.microsoft.com/en-us/library/ff433988.aspx

nota la fonte (texture) è ancora un rettangolo, ma questo è tipicamente una cosa statica (non C# static parola chiave, ma immutabile, undynamic).

+0

So che c'è un tale sovraccarico, ma onestamente il sovraccarico che richiede un rettangolo è molto più comodo da usare la maggior parte del tempo. :) – Venemo

+1

Non in disaccordo, ma tecnicamente è un modo per evitarli. –

Problemi correlati