Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





[WP7] Gestures y rotación de sprites

Iniciado por jbosch, 24 de Marzo de 2012, 05:38:41 PM

« anterior - próximo »

jbosch

Hola,

Estoy "jugando" a rotar y escalar un sprite a base de gestos. El tema del escalado me funciona perfectamente, a partir del GestureType "Pinch". La rotación la calculo también con el pinch, de la forma siguiente:

Vector2 vect = gesture.position2-gesture.position;
angulo = atan2(vext.Y, vect.X);

Eso funciona perfectamente. El problema es que cuando pongo los dos dedos en pantalla el sprite pilla de golpe el ángulo calculado (que de hecho es correcto), pero el efecto es muy feo, ya que gira "de golpe". Lo que me gustaría hacer es, una vez puestos los dos dedos sobre la pantalla, a medida que los vayamos moviendo, calcular ese ángulo.

Parece sencillo, pero o bien estoy ofuscado o bien no lo es tanto porque no me sale :-P alguna idea?

thks!
Jesús Bosch Aiguadé
PLUNGE INTERACTIVE
------------------
Twitter:
@plungeint
@jboschaiguade
------------------
Facebook:
http://www.facebook.com/plungeinteractive

AgeR

No sé si lo he pillado, pero parece que quieres que el movimiento del sprite no sea tan brusco, es así? Por lo que dices, estás aplicando el ángulo al sprite directamente. En vez de eso, puedes pillar el ángulo actual y el ángulo objetivo e interpolar entre ambos en el tiempo que consideres oportuno.

Algo me dice que será algo más complicado y no lo he entendido bien  ???

Saludos!

jbosch

Me explico fatal  :-[

A ver, la rotación es suave, es 'perfecta' ya que se mueve exactamente a la misma velocidad q los dedos.

Para explicar el problema, inaginemos q el modelo a rotar es un hombre en pié. Si pongo los dedos en pantalla, uno a cada lado del hombre, este rotará 90 grados. A partir de aquí, cuando vaya moviendo los dedos el movimiento es suave, pero es esa rotación inicial la que quiero evitar.

No se si ahora el problema es mas claro :-S
Jesús Bosch Aiguadé
PLUNGE INTERACTIVE
------------------
Twitter:
@plungeint
@jboschaiguade
------------------
Facebook:
http://www.facebook.com/plungeinteractive

jbosch

Jesús Bosch Aiguadé
PLUNGE INTERACTIVE
------------------
Twitter:
@plungeint
@jboschaiguade
------------------
Facebook:
http://www.facebook.com/plungeinteractive

dari

Se me ocurre lo siguiente (sin ver código)

Tu tienes ahora un ángulo de rotación, en lugar de aplicarlo directamente, haz esto:

Vector2 vect = gesture.position2-gesture.position;
angulo = atan2(vext.Y, vect.X);

anguloModelo += angulo - anguloAnterior;

anguloAnterior = angulo;

Así se te ira incrementando, pero claro, no se te situará tal y como quieres al inicio. Si quieres que se te sitúe, calcula a que ángulo debería estar en cada frame y ve moviendo hasta alcanzar este ángulo. Si mueves los dedos, pues corriges el ángulo de destino.

Vector2 vect = gesture.position2-gesture.position;
anguloDestino = atan2(vext.Y, vect.X);

anguloModelo += (anguloDestino-anguloModelo)*velocidadRotacion*deltaTiempo;

No se si me he explicado bien... :/

jbosch

No suena mal, no se si podre probarlo hasta mañana xro tiene buena pinta, gracias :D
Jesús Bosch Aiguadé
PLUNGE INTERACTIVE
------------------
Twitter:
@plungeint
@jboschaiguade
------------------
Facebook:
http://www.facebook.com/plungeinteractive

dari


jbosch

buenas, al final he calculado la diferencia entre los ángulos de los dos dedos a lo largo de cada frame, y ese ángulo se lo he ido sumando al ángulo del modelo.

A veces, dependiendo del orden en el que pusiera los dedos sobre la pantalla (izquierdo->derecho o derecho->izquierdo) el modelo daba una vuelta de 360 grados. Para evitarlo he hecho que la rotación no se aplique si la diferencia de grados es mayor a X. Es una solución algo "chapucera", pero no se me ha ocurrido ninguna otra forma de hacerlo :-P

lastima que es algo para el trabajo, sino me habría gustado compartir todo el código

un saludo!
Jesús Bosch Aiguadé
PLUNGE INTERACTIVE
------------------
Twitter:
@plungeint
@jboschaiguade
------------------
Facebook:
http://www.facebook.com/plungeinteractive






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.