Comunidad de diseño web y desarrollo en internet online

¿Cómo escalar MovieClips con pantalla táctil?

Citar            
MensajeEscrito el 18 Sep 2013 12:24 pm
Hola a todos, estoy empezando en el mundo de las pantallas táctiles y tengo un FLASH hecho con AS3 y Flash CS6.
En dicho flash tengo diferentes MovieClips (MC) que arrastro con el dedo por toda la pantalla. Pero necesito poder escalar también estos MC, ¿cómo puedo hacerlo? ¿qué listener tengo que invocar? Para escalarlo el movimiento que debería hacer con los dedos sería coger esquina opuestas y tirar de ellas.

¿Alguien puede echarme una mano?
Muchas gracias

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Sep 2013 02:16 pm
BuenAS:

Mirate el evento

TransformGestureEvent.GESTURE_ZOOM

Y cuidado que lo que obtienes son incrementos de escala, por lo que el símbolo tendrías que actualizarlo con algo similar a esto:

Código ActionScript :

simbolo.scaleX *= event.scaleX;
simbolo.scaleY *= event.scaleY;


Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 18 Sep 2013 02:18 pm
...en la ayuda de la API de ActionScript tienes código de ejemplo:

TransformGestureEvent

Al final del anterior enlace verás un código de ejemplo :) .

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 26 Sep 2013 01:10 pm
Hola Lukánicos, he probado en una pantalla táctil el código que comentas y no consigo que entre en la función correspondiente.
Te pego el trozo de código a ver si puedes ver por dónde está el error:

Código ActionScript :

import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.TransformGestureEvent;
import flash.ui.Multitouch;
import flash.ui.MultitouchInputMode;

var mc:Sprite;

Multitouch.inputMode = MultitouchInputMode.GESTURE;
mc.addEventListener(MouseEvent.MOUSE_DOWN, onItemDown);
mc.addEventListener(MouseEvent.MOUSE_UP, onItemUp);
mc.addEventListener(TransformGestureEvent.GESTURE_ZOOM, onZoom);
mc.addEventListener(TransformGestureEvent.GESTURE_ROTATE, onRotate);

function onItemDown(e:MouseEvent):void
{
   trace("startDrag");
   var item:Sprite = e.target as Sprite;
   item.startDrag();
}
function onItemUp(e:MouseEvent):void
{
   trace("stopDrag");
   var item:Sprite = e.target as Sprite;
   item.stopDrag();
}
function onZoom(e:TransformGestureEvent):void
{
   trace("onZoom");
   var item:Sprite = e.target as Sprite;
   item.scaleX *= e.scaleX;
   item.scaleY *= e.scaleY;
}
function onRotate(e:TransformGestureEvent):void
{
   trace("onRotate");
   var item:Sprite = e.target as Sprite;
   item.rotation += e.rotation;
}

¿Alguna idea? ¿Cómo puedo solucionarlo?
Muchas gracias

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Sep 2013 02:00 pm
Remarcar que lo necesito para una pantalla táctil de PC y se verá en un navegador web, NO en un smartphone.
Es esto posible? No necesito una aplicación AIR, sino una aplicación web.

Muchas gracias

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Sep 2013 02:21 pm
BuenAS:

Lo primero que veo es que utilizas eventos tradicionales de ratón con startDrag stopDrag. Me da la impresión de que posiblemente se te solapen los dos tipos de eventos, o sea, que cuando quieras hacer un zoom, el primer dedo que toque la pantalla también desencadene el evento MOUSE_DOWN y empieces también a arrastrar el símbolo (a saber lo que puede estár generándose, haz un trace para ver qué valores toman los incrementos de zoom).

Yo cuando he hecho algo (para iOS) he utilizado el evento TransformGestureEvent.GESTURE_PAN para arrastrar los símbolos. Y también tenía la precaución de que cuando estaba haciendo PAN desactivaba el gesto ZOOM. Para ello, basta con comprobar dentro del listener:

event.phase == GesturePhase.BEGIN

event.phase == GesturePhase.END

En el primer caso eliminas el listemer TransformGestureEvent.GESTURE_ZOOM y en el segundo caso lo añades.

Creo que en la ayuda viene mejor explicado que lo que he hecho yo aquí ;)

Por otro lado, ¿es Windows 7? Cuidado porque este tipo de eventos en este SO va bastante lento. En Windows 8 lo han mejorado bastante.

Y también cuidado con el número de ptos táctiles que genera la pantalla y que soporta el SO. En muchas ocasiones es de sólo 2, por lo que si es el caso, olvidate de poder arrastrar varios objetos a la vez, o de hacer zoom a un mientras arrastras otro.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 26 Sep 2013 02:48 pm
Hola Lukánicos, he comentado los eventos de MOUSE_DOWN y MOUSE_UP y no consigo que me entre en los eventos de GESTURE_ZOOM y GESTURE_ROTATE.
Tal como te he dicho estoy trabajando en un .fla de AS3, no en un .fla de AIR.
Si lo exporto como un fichero AIR sí que puedo rotar y hacer zoom, pero no me sirve que sea AIR.
Alguna idea?
Muchas gracias

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Sep 2013 03:36 pm
BuenAS:

Pues la verdad no sé qué puede estar pasando. Imagino que estás con Windows 7. Echa un vistazo al anterior enlace para ver si es compatible.

Yo hice hace un par de años para una tableta con Windows 7 y el único problema que tuve es que sólo tenía 2 ptos multitouch.

La clase Multitouch puede informarte de lo que soporta tu dispositivo:
Multitouch .supportedGestures
Multitouch .supportsGestureEvents
Multitouch supportsTouchEvents

Mira a ver si cambia en tu SO cuando publicas para AIR y para Flash Player.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 26 Sep 2013 03:49 pm
Hola Lukánicos,
Si lo publico en AS3 NO me deja hacer multitouch.
Si lo publico en AIR SÍ me deja hacer multitouch.

Hay alguna posible solución?

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Sep 2013 04:04 pm
Ni idea :(

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 26 Sep 2013 04:13 pm
Acabo de acordarme de que en Mac los gestos multitouch no funcionaban según comenta Lee Brimellow para la versión de Flash Player 10.1. ¿Es tu caso?
Yo no he hecho nada para Mac multitouch y no sé si esto se ha solucionado o no.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 26 Sep 2013 04:41 pm
En principio estoy accediendo desde un Windows7.
Yo pensaba que los eventos multitouch respondían al tipo de pantallla que tienes, y si tenías una pantalla táctil, esta ya emulaba una pantalla de un smartphone/tablet, pero veo que no. Vaya fastidio.
Muchas gracias por tu tiempo y si se te ocurre algo más me dices.

Por Palacio

Claber

198 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.