2011-02-26 3 views
13

Dans mon jeu cocos2d, j'ai mon sprite de joueur et je veux qu'il bouge dans la direction où je incline mon iPhone. Je peux faire face à cela, le plus dur que je ne peux pas travailler est:Point dans la direction d'inclinaison - iPhone

Comment puis-je faire mon sprite tourner à pointer dans la direction que je suis inclinaison? Ceci est très bien représenté dans le jeu "Tilt to Live" sur l'App Store. Je veux des contrôles comme ça.

Mon sprite (pour ceux qui ne connaissent cocos2d) a une valeur de rotation si cela aide.

Merci.

Répondre

12

Si vous n'aimez pas ce qui précède, voici une façon plus simple d'obtenir un résultat raisonnable!

Tenir l'iPad devant vous, laissez-LR être l'inclinaison gauche/droite, TA le vers vous/loin de vous incliner. Donc LR va de -90 à 90, TA de -90 à 90. (TA négatif est penché vers votre ventre.)

Affichez ces deux nombres sur votre écran et déplacez l'appareil pour que vous soyez certain ce droit pour commencer. Vous ne pourrez rien faire tant que cela ne fonctionnera pas.

Le solutionAngle sera comme une main d'horloge, dans le sens horaire, avec 12 éloigné de vous.

Traverser cette chaîne de décision:

Si les deux LR et TA est égal à zéro, la machine est plat. Agir de manière appropriée.

Si LR est plat (0), la réponse est soit 0 ou 180, selon le signe de l'AT.

Si TA est plat (0), la réponse est soit 90 ou 270, selon le signe de LR.

Sinon:

adjustmentAngle = arctan (sin (TA)/sin (LR))

// (NB, qui devrait fonctionner de -90 à 90)

si (LR> 0) finalResult = 90 - adjustmentAngle

if (LR < 0), finalResult = 270 + adjustmentAngle

Je pense que ça va le faire! J'espère que cela aide!

IMO ...... assurez-vous de lisser le résultat au fil du temps, pour une bonne sensation.

.

réglage de l'angle ...

« la seule chose que je ne suis pas sûr de ce moment (en ce qui concerne votre propre idée) est de savoir comment puis-je demander à mon lecteur? Est-ce que je fais simplement la valeur de rotation du joueur égale à l'ajustementAngle? " .. salut Josh, oui il suffit de régler la rotation à l'angle final que vous calculez en utilisant ce qui précède! Heureusement, c'est aussi simple que ça.

Si vous avez jamais reconvertir/avant entre les degrés et radians, il suffit de coller dans ces lignes de code que tout le monde utilise:

#include <math.h> 
static inline float degreestoradians (double degrees) {return degrees * M_PI/180;} 
static inline float radianstodegrees (double degrees) {return degrees * 180/M_PI;} 

. ?

où sont les axes ...

PS, voici le schéma incroyablement pratique vous pouvez signet:

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAcceleration_Class/Reference/UIAcceleration.html

.

conversion de l'accéléromètre à des angles ...

« l'accéléromètre ne fournit pas les données brutes dans les angles. Comment ne pas obtenir à partir des données brutes »

Très bien, j'oublié de mentionner c'est désolé. Ceci est un problème quotidien ...

distanceFactor = square root of (x^2 + y^2 + z^2) 
angle X axis = acos (x/distanceFactor) 
angle y axis = acos (y/distanceFactor) 
angle z axis = acos (z/distanceFactor)) 

Vous devez tester en écrivant les trois angles sur l'écran, puis la déplacer, autrement dit « physiquement test unitaire » que l 'article que vous écrivez, avant de procéder!

ici est l'une des nombreuses réponses de SO: UIAccelerationValue angle

BTW que vous pouvez probablement voir, vous pouvez obtenir un résultat approximatif en prenant le ratio simplement x brut par valeur y brute, plutôt que le rapport de les deux sinus, dans l'expression 'adjustmentAngle' ... mais de toute façon ne vous inquiétez pas pour le moment.

Et enfin!

IMPORTANT Les lecteurs devraient noter que l'incroyable nouvelle système de base de mouvement, gère beaucoup de cela pour vous, en fonction de vos besoins. Vérifiez-le!!!!!

J'espère que ça aide!

+0

Cool, merci pour les options! Peut-être pourriez-vous jeter un coup d'œil à cela? Son de la tuile réelle au développeur en direct seulement je ne peux pas voir comment appliquer le code qu'il a donné. Si vous pouviez expliquer comment je pourrais utiliser cela pratiquement et pas seulement sa signification, je serais éternellement reconnaissant! http://www.paradeofrain.com/2010/07/lessons-learned-in-tilt-controls/ –

+0

l'accéléromètre ne fournit pas les données brutes dans les angles. Comment obtenir à partir des données brutes (généralement -1 à 1, sauf si le périphérique est déplacé de force) dans la plage de -90 à 90, considérant que si vous maintenez l'appareil à un angle de 45 degrés, le nombre brut ne sera pas 0.5, mais plus comme 0,7 –

+0

Excuses, je n'avais pas essayé d'écrire votre échantillon pour la raison que je savais une fois compris le code lié serait idéal. Je sais que le code de travail se trouve au bas de la page liée, mais j'ai mal compris comment il est censé être appliqué à l'esprit du joueur. Je vais essayer votre deuxième idée (je n'utilise pas Unity), la seule chose dont je ne sais pas actuellement (concernant votre propre idée) est de savoir comment l'appliquer à mon lecteur. Est-ce que je fais simplement que la valeur de rotation du joueur est égale à l'adjustAngle? –

Questions connexes