Comunidad de diseño web y desarrollo en internet online

Gesto Deslizar AS3 Android

Citar            
MensajeEscrito el 03 Sep 2015 07:42 pm
Hola buen día a todos, logre hacer el gesto de deslizar en as3 en Android, lo que pido ayuda es que en cada pantalla que es un MC desliza tiene que correr una animación y así en cada pantalla, cada pantalla es un mc y dentro de esos mc tiene una animacion :oops:

En mi flash tengo una clase que se llama Menu.as, dejo el código

Código ActionScript :

package Clases {
   
   import flash.display.MovieClip;
   import flash.events.TransformGestureEvent;
   import flash.ui.Multitouch;
   import flash.ui.MultitouchInputMode;
   import flash.events.Event;
   
   
   public class Menu extends MovieClip {
      
         private var Pantalla:Number = 1;
         private var totalPantallas:Number = 3;
         private var DistanciaX:int = 0;
         private var Tiempo:Number = 0;
      
      public function Menu() {
         // constructor code
         Multitouch.inputMode = MultitouchInputMode.GESTURE;
         addEventListener(TransformGestureEvent.GESTURE_SWIPE, MoverMenu);
      }
      private function MoverMenu(event:TransformGestureEvent):void{
         if(event.offsetX ==1){
            if(Pantalla > 1){
               Pantalla--;
               ChecarDistancia(Pantalla);
               addEventListener("enterFrame", Mover);
               Tiempo = 0;
            }
         }
         else if(event.offsetX == -1){
            if(Pantalla<totalPantallas){
               Pantalla++;
               ChecarDistancia(Pantalla);
               addEventListener("enterFrame", Mover);
               Tiempo = 0;
            }
         }
      }
      private function ChecarDistancia (numero:int):void{
         switch (numero){
            case 1: DistanciaX = 400;
            break;
            case 2: DistanciaX = -400;
            break;
            case 3: DistanciaX = -1200;
            break;
         }
      }
      private function Mover(event:Event):void{
         x = x+(DistanciaX -x ) * 0.3;
         Tiempo++;
         if(Tiempo ==20){
            removeEventListener("enterFrame", Mover);
            Tiempo = 0;
            
         }
      }
   }


}

Se los agradecería mucho si me guían un poco, Gracias.

Por CarlosCG84

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 04 Sep 2015 06:05 pm
No entiendo la pregunta ... cuando ejecutas el drag tienes que lanzar una animación?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Sep 2015 06:23 pm
Gracias solisarg por responder.

Cuando ejecuto el drag entra una pantalla en mi caso son tres pantallas que tengo, cada pantalla es un mc y dentro de cada mc hay una pequeña animación, entonces cuando lo exporto se ejecutan todas las animaciones que están dentro de cada mc y cuando hago el drag a cada pantalla ya solo veo el final de cada animación y lo que quiero hacer es que cuando llegue a una pantalla inicie esa animación.

Por CarlosCG84

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 07 Sep 2015 12:37 pm
Para que una animación no arranque automáticamente tienes que poner en el primer fotograma: stop();
Para poder iniciar la animación debes conocer la ruta al MC, supongamos que sea menu.menu1, entonces harías al comienzo de MoverMenu

Código ActionScript :

 private function MoverMenu(event:TransformGestureEvent):void{
         if(event.offsetX ==1){
            if(Pantalla > 1){
                 MovieClip(menu.menu1).gotoAndStop(1); //por si ya la has reproducido
                 MovieClip(menu.menu1).play();
                  (....)


De esta forma arrancas la animación cuando empieza el drag ... no olvides poner un stop en el último fotograma de la animación si no quieres que vuelve al primer fotograma

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 07 Sep 2015 11:10 pm
Gracias por la respuesta Jorge ya lo probé pero no me deja. Quedo así el código

private function MoverMenu(event:TransformGestureEvent):void{
if(event.offsetX ==1){
if(Pantalla > 1){
MovieClip(menu.menu2).gotoAndStop(1); //por si ya la has reproducido
MovieClip(menu.menu2).play();
Pantalla--;
ChecarDistancia(Pantalla);
addEventListener("enterFrame", Mover);
Tiempo = 0;

Pero me marca Access of undefined property menu

Probé quitando el menu. y solo dejar menu2 que es como se llama mi MC que esta dentro de menu y no me marco error pero cuando hago el drag ya se reproducio la animación y solo veo la parte final cuando llego a esa pantalla :(

Por CarlosCG84

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 Sep 2015 11:06 am
Tienes que fijar certeramente la condición cuando se dispara la animación ... es cuando empieza el drag? Tienes que adaptar lo que te digo a tu entorno ... si esta dentro de menu y al mismo nivel de menu2, puedes hacer

MovieClip(parent.menu2)

Busca las rutas. Puede que no este haciendo nada ... para eso agrega un trace en el primer fotograma de tu animacion

trace("Comienza animación");

Lo verás en el panel de salida (cuando pruebas desde Flash), mira si esta haciendo lo que se supone

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Sep 2015 01:48 pm
Creo que funciono asi, pero no del todo bien ya no me sale el error de la ruta

Código :

private function MoverMenu(event:TransformGestureEvent):void{
         if(event.offsetX ==1){
            if(Pantalla > 1){
               menu2.gotoAndStop(1); //por si ya la has reproducido
               menu2.play();
               Pantalla--;
               ChecarDistancia(Pantalla);
               addEventListener("enterFrame", Mover);
               Tiempo = 0;


Pero me sigue reproduciendo la animación sin llegar a la pantalla 2 que es donde tengo la animación, pero cuando llego a la pantalla 2 y me paso a la pantalla 3 se ve como reinicia la animación de la pantalla 2, pero cuando quiero regresar a la pantalla 2 ya no se vuelve a reproducir la animación... :( No se si me entendí con esa explicación jejeje

https://www.dropbox.com/s/elyo8ptm51imytr/Actua.zip?dl=0

Es mi archivo fuente solo por si no me entendi :oops:
Gracias por la ayuda.

Por CarlosCG84

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 Sep 2015 06:23 pm
No se entiende, con lo cual creo que incluso el planteo mismo es confuso:

- Tienes que definir una condición específica para lanzar la animación ... "que llego" o "Que arrastro" se traduciría en "en el starDrag" (o cuando se inicia el onEnterFrame en MoverMenu) o en "el MC está en x=250"
- Las animaciones tienen una duración arbitraria que se cuenta en frames por segundo ... que tipo de sincronicidad quieres establecer? Verla mientras estas en donde? Define ese "donde"

... en otras palabras, el mecanismo tiene que ser muy claro, sino no se puede programar

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Sep 2015 03:44 pm
Gracias por la respuesta solisarg

Asi quedo mi codigo ya lo hice funcionar jejeje

Código :

package Clases {
   
   import flash.display.MovieClip;
   import flash.events.TransformGestureEvent;
   import flash.ui.Multitouch;
   import flash.ui.MultitouchInputMode;
   import flash.events.Event;
   
   
   public class Menu extends MovieClip {
      
         private var Pantalla:Number = 1;
         private var totalPantallas:Number = 5;
         private var DistanciaX:int = 0;
         private var Tiempo:Number = 0;
      
      public function Menu() {
         // constructor code
         Multitouch.inputMode = MultitouchInputMode.GESTURE;
         addEventListener(TransformGestureEvent.GESTURE_SWIPE, MoverMenu);
      }
      private function MoverMenu(event:TransformGestureEvent):void{
         if(event.offsetX ==1){
            if(Pantalla > 1){
               Pantalla--;
               ChecarDistancia(Pantalla);
               addEventListener("enterFrame", Mover);
               Tiempo = 0;
               
            }
         }
         else if(event.offsetX == -1){
            if(Pantalla<totalPantallas){
               Pantalla++;
               ChecarDistancia(Pantalla);
               addEventListener("enterFrame", Mover);
               Tiempo = 0;
            }
         }
      }
      private function ChecarDistancia (numero:int):void{
         switch (numero){
            case 1:
               DistanciaX = 1280;
               menu1.gotoAndPlay(1);
            break;
            case 2:
               DistanciaX = -1280;
               menu2.gotoAndPlay(1);
            break;
            case 3:
               DistanciaX = -3840;
               menu3.gotoAndPlay(1);
            break;
            case 4:
               DistanciaX = -6400;
               menu4.gotoAndPlay(1);
            break;
            case 5:
               DistanciaX = -8960;
               menu5.gotoAndPlay(1);
            break;
         }
      }
      private function Mover(event:Event):void{
         x = x+(DistanciaX -x ) * 0.3;
         Tiempo++;
         if(Tiempo ==20){
            removeEventListener("enterFrame", Mover);
            Tiempo = 0;
         }
      }
   }
   
}


Pero tengo otra pregunta si tengo un botón en cada pantalla que se llama avanzar y otro retroceder cuando le den clic en el botón de avanzar cambie de pantalla que haga lo mismo como si le hiciera el gesto de deslizar pero ahora con un clic que en este caso es al botón de avanzar. :oops:

Por CarlosCG84

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Sep 2015 08:00 pm
En la funciòn de tu botòn tienes que llamar a la funciòn de tu Slide, en este caso MoverMenu. Para que avance tienes que poner la propiedad del evento offsetX en 1 y para que retroceda en -1.

Algo asì:

function fncClick(_ev:MouseEvent):void {
var _myEv:TransformGestureEvent = new TransformGestureEvent();
_myEv.offsetX = 1;
MoverMenu(myEv);
}

Saludos

Por Kottore

0 de clabLevel



 

Mekishiko

firefox
Citar            
MensajeEscrito el 05 Oct 2018 12:30 am
En la funciòn de tu botòn tienes que llamar a la funciòn de tu Slide, en este caso MoverMenu. Para que avance tienes que poner la propiedad del evento offsetX en 1 y para que retroceda en -1.

Por zozan zozan

4 de clabLevel



 

chrome

 

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