2010-08-12 12 views
5

ok, quindi apparentemente i giochi xna possono funzionare solo a 30fps, il che è un peccato, perché il nostro gioco su iphone sembrava molto meglio a 60 ...windows phone 7, xna, come faccio a campionare il touch screen più regolarmente

in ogni caso, perché l'unico modo per ottenere informazioni sullo stato del touchscreen è quello di ottenere il suo stato corrente, in pratica questo significa che è possibile campionare il touch screen a 30 fps.

anche se il nostro gioco deve funzionare a 30fps, c'è un modo per ottenere un campionamento a risoluzione più alta dal touch screen? forse attraverso i callback? o accedendo a un elenco di eventi tattili con timestamp?

risposta

0

La frequenza di campionamento di 30 fps è impostata per motivi di prestazioni.

Anche se si riuscisse a trovare un modo per interrogare i tocchi con maggiore frequenza, non è ancora possibile aggiornare l'interfaccia utente a una velocità maggiore, quindi non sono sicuro di quale vantaggio si otterrebbe.

Prima di dedicare troppo tempo a cercare una soluzione, testavo su un dispositivo reale per vedere quanto sia davvero accettabile 30 fps.

+0

oh, abbiamo, e il problema è che abbiamo avere come una pista che segue il tocco in giro. ed è tutto irregolare a 30fps, per ora lo abbiamo spianato con le spline, ma mi sembra ancora un po 'strano che tu non possa farlo ... puoi farlo sull'iPhone 3G ... e io ho apparecchi di cottura che sono più potenti dal punto di vista computazionale ... hell ... anche il DS ... – matt

+0

Devi ricordare che il sistema operativo Windows non funziona sempre sullo stesso hardware come l'iPhone - ci saranno diverse funzionalità disponibili . C'è anche la durata della batteria da considerare. –

2

La funzione che stai cercando è TouchPanel.GetState. Si tratta semplicemente di chiamare questa funzione a 60Hz.

Per ottenere 60 Hz è possibile impostare Game.TargetElapsedTime a 1/60 di secondo. Questo ti darà due aggiornamenti per ogni estrazione (secondo Shawn Hargreaves' post here) assumendo che tu stia VSyncing a 30FPS.

Se si desidera che gli aggiornamenti dello stato del gioco vengano eseguiti a 30 FPS (è sufficiente inserire il tocco su 60 FPS), è possibile inserire tali aggiornamenti su un thread diverso. Avviare un aggiornamento in corso su quel thread alla prima chiamata a Game.Update e attendere che termini il secondo e così via.

(Si dovrebbe notare che l'ingresso normalmente XNA deve essere fatto sul thread principale (source). Presumo che ciò vale per telefono e toccare di ingresso.)

In alternativa si potrebbe sostituire il Game la classe di soli temporizzazione del tutto (chiamando lo GraphicsDevice.Present da soli). Non è facile da fare, ma è possibile. Un buon punto di partenza è guardare la classe Game in Reflector.

(Disclaimer:. Non ho ancora provato qualsiasi effettivo sviluppo Phone-based, quindi ci può essere qualche trucchi Telefono legati Sono a conoscenza di)