2012-12-20 2 views
0

J'écris un jeu sur iOS et j'essaye de configurer le mouvement de réponse en utilisant l'accéléromètre. Donc quand je démarre le jeu sur l'iPhone, tout va bien et l'accéléromètre répond sans problème. Mais quand j'arrête la boucle de jeu (menu pause), puis que je la relance, l'entité sur l'écran saute quelque part, puis après quelques secondes revient en place. Je crois que cela se produit en raison d'une différence de delta entre la boucle de jeu et le delta de l'accéléromètre. Donc, je me demandais est-il un moyen de régler l'accéléromètre sur iPhone pour mettre à jour uniquement les valeurs lorsque la boucle de jeu se met à jour?Est-il possible de régler UIAccelerometer delta?

Les valeurs de UIAccelerometer sont lus comme ça (j'ai juste besoin l'axe des x) - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { accelerometValues[0] = acceleration.x * 0.1f + accelerometValues[0] * (1.0 - 0.1f); }

L'accéléromètre est configuré comme suit [[UIAccelerometer sharedAccelerometer] setUpdateInterval:1.0/60.0]; [[UIAccelerometer sharedAccelerometer] setDelegate:currentScene];

La boucle de jeu lui-même a été pris de tutoriel par Alex Diener GameLoop Tutorial

Répondre

0

Lorsque vous faites une pause, vous pouvez arrêter d'écouter des événements Accéléromètre en supprimant le délégué:

[[UIAccelerometer sharedAccelerometer] setDelegate:nil]; 

Ensuite, il suffit de configurer l'accéléromètre à nouveau lorsque le jeu reprend. Il ne devrait pas être nécessaire de modifier les données renvoyées, ignorez simplement les données dont vous n'avez pas besoin.

+0

Merci, cela a fonctionné. Je ne voulais pas modifier les données, mais il semblait que c'était mis en cache puis libéré. – Setrino

+0

Si votre boucle de jeu se trouve dans un thread différent et que la boucle d'exécution de ce thread n'était pas en cours d'exécution, il pourrait faire la queue à l'accéléromètre puisque l'accéléromètre appelait toujours le délégué lorsque le jeu était en pause. Cela pourrait être ce que vous voyiez. Lorsque le thread est repris, tous ces appels de méthode seraient exécutés. – Kekoa

+0

Cela semble raisonnable. Merci une fois de plus. – Setrino