2011-02-26 10 views
13

En mi juego cocos2d, tengo mi sprite de jugador y quiero que se mueva en la dirección en que inclino mi iPhone. Puedo lidiar con eso, la parte más difícil que no puedo resolver es:Point in Tilt Direction - iPhone

¿Cómo hago que mi sprite gire para apuntar en la dirección en que estoy inclinado? Esto se representa muy bien en el juego 'Tilt to Live' en la tienda de aplicaciones. Quiero controles así como así.

Mi sprite (para aquellos que no están familiarizados con cocos2d) tiene un valor de rotación si eso ayuda.

Gracias.

Respuesta

12

Si no te gusta lo anterior, ¡aquí hay una forma más sencilla de obtener un resultado razonable!

Sostenga el iPad frente a usted, deje que LR sea la inclinación izquierda/derecha, TA hacia usted/lejos de su inclinación. Así que LR funciona desde -90 a 90, TA desde -90 a 90. (TA negativa se inclina hacia su barriga.)

Muestre ambos números en la pantalla y mueva el dispositivo para asegurarse de que tiene ese derecho para comenzar. No podrás hacer nada hasta que eso funcione.

La soluciónAngle será como una manecilla de reloj, en el sentido de las agujas del reloj, con 12 de distancia de usted.

pasan por esta cadena de toma:

Si ambos LR y TA es cero, la máquina es plana. Actúa apropiadamente.

Si LR es plano (0), la respuesta es 0 o 180, dependiendo del signo de TA.

Si TA es plano (0), la respuesta es 90 o 270, dependiendo del signo de LR.

De lo contrario:

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

// (NB, que deben ejecutarse -90-90)

si (LR> 0) finalResult = 90 - adjustmentAngle

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

¡Creo que lo hará! ¡Espero eso ayude!

IMO ...... asegúrese de suavizar el resultado en el tiempo, para una buena sensación.

.

ajuste del ángulo ...

"lo único que estoy seguro de actualidad (con respecto a su propia idea) es cómo lo aplico a mi reproductor? ¿Debo hacer simplemente el valor de rotación jugador igual a la el ajuste ¿Angle? " .. hola Josh, sí, simplemente establece la rotación en el ángulo final que calcule utilizando lo anterior. Afortunadamente es así de simple.

Si alguna vez tiene que convertir de nuevo/primer plano entre grados y radianes, basta con pegar en estas líneas de código que todo el mundo utiliza:

#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;} 

. ?

dónde están los ejes ...

PS, aquí está el diagrama increíblemente útil es posible que desee marcar:

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

.

la conversión de acelerómetro para ángulos ...

"el acelerómetro no proporciona los datos en bruto en los ángulos. ¿Cómo no obtener de los datos en bruto"

Muy cierto, se me olvidó mencionar lo siento Este es un problema cotidiano ...

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)) 

debe probar esto escribiendo los tres ángulos de la pantalla y luego cambiarlo de sitio, en otras palabras "físicamente unidad de prueba" de que el artículo que escribe, antes de proceder!

aquí es una de las muchas respuestas de SO: UIAccelerationValue angle

Por cierto ya que probablemente puede ver, se puede obtener un resultado bruto tomando la relación de simplemente el x prima por valor de y en bruto, en lugar de la relación de los dos senos, en la expresión 'ajuste angular' ... pero de todos modos no te preocupes por eso por ahora.

¡Y finalmente!

IMPORTANTE Los lectores deben tener en cuenta que la nueva y sorprendente sistema de movimiento Core, maneja una gran cantidad de esto para usted, dependiendo de sus necesidades. ¡¡¡¡¡Echale un vistazo!!!!!

Espero que ayude!

+0

Cool, gracias por las opciones! ¿Quizás podrías echarle un vistazo a esto? Es solo del desarrollador real de azulejo a vivo. No puedo ver cómo aplicar el código que ha dado. ¡Si pudieras explicar cómo podría usar esto prácticamente y no solo su significado, estaría eternamente agradecido! http://www.paradeofrain.com/2010/07/lessons-learned-in-tilt-controls/ –

+0

el acelerómetro no proporciona los datos brutos en ángulos. ¿Cómo se obtiene de los datos brutos (generalmente -1 a 1, a menos que el dispositivo se mueva con fuerza) en el rango de -90 a 90, teniendo en cuenta que si mantiene el dispositivo en un ángulo de 45 grados, el número bruto no será 0,5, pero más como 0.7 –

+0

Disculpas, no había intentado escribir su muestra porque sabía que una vez descubierto que el código vinculado sería ideal. Sé que el código de trabajo se encuentra en la parte inferior de la página vinculada, pero no entiendo cómo se debe aplicar al sprite del jugador. Voy a intentar tu segunda idea (no uso Unity), de lo único que no estoy seguro (con respecto a tu propia idea) es ¿cómo la aplico a mi jugador? ¿Simplemente hago que el valor de rotación del jugador sea igual al ajuste? –