Comunidad de diseño web y desarrollo en internet online

Animar un TextField a partir de la captura de otro TextField

Citar            
MensajeEscrito el 19 Ene 2011 11:17 pm
Hola a todos!
Estoy aqui porque necesito vuestra ayuda. Estoy tratando de crear una pequeña aplicacion para un trabajo de la universidad y no tengo ni idea!... soy novata (y bastante torpe) con el AS.
Lo que quiero es crear mensajes musicales: tengo un fla y dos clases AS3. El funcionamiento es el siguiente: el usuario escribe un mensaje en un campo de texto y pulsa un botón que "musicaliza" el mensaje mediante la captura letra por letra del mensaje y por cada letra hace un llamado URL a un mp3 externo.
Además de escuchar el mensaje escrito, mi intención es que se pueda visualizar una animación del propio texto y he pensado en usar una clase opensource llamanda Textanim (http://flupie.net/textanim/docs/flupie/textanim/TextAnim.html) junto con el Tweener , peeeeero hasta aquí llegué...no sé cómo integrarlo en mi código pues (aqui esta el problema principal), no sé cómo hacer para que el campo de texto animado, obtenga el string desde el otro campo de texto input...
Esto está muy enredado y espero que alguien logre entenderme... lo siento, no sé cómo explicarlo mejor.
Os dejo mis clases (perdón por el código tan sucio, es que de verdad soy bastante "jojota" como dicen en Venezuela)
Muchas gracias!!

CODIGOS:
Clase Main:

Código ActionScript :

package 
{
   import flash.utils.Timer;
   import flash.events.TimerEvent;
   import flash.events.Event;
   import flash.events.MouseEvent;
   import flash.display.MovieClip;
   import flash.media.Sound;
   import flash.media.SoundChannel;
   import flash.net.URLRequest;
   import LetraSonido;
   import flash.text.*;
   import flash.events.TextEvent;
   

   public class PresentacionMusical extends MovieClip
   {
      var textoPresentacion:String;
      var temporizador:Timer = new Timer(500);
      var posicion:int = 0;
      var arraySonidos:Array = new Array  ;
      var cajaTexto:TextField = new TextField  ;
      var textoAnimado:TextField = new TextField  ;

      public function PresentacionMusical()
      {
         capturarTexto();
         animarTexto();
         btn_musical.addEventListener(MouseEvent.CLICK,capturarTexto);
         btn_musical.addEventListener(MouseEvent.CLICK,reproducirTexto);
         btn_musical.addEventListener(MouseEvent.CLICK,animarTexto);

         var sonido:LetraSonido = new LetraSonido  ;
         addChild(sonido);

      }
      
      public function capturarTexto():void
      {
         var formatoTexto:TextFormat=new TextFormat();
         formatoTexto.color = 0xFFFFFF;
         formatoTexto.size = 16;
         formatoTexto.align = 'left';
         formatoTexto.font = 'verdana';
         formatoTexto.leftMargin = 20;
         //arguments;

         cajaTexto.type = TextFieldType.INPUT;
         cajaTexto.x = 20;
         cajaTexto.y = 40;
         cajaTexto.width = 800;
         cajaTexto.height = 30;
         cajaTexto.background = true;
         cajaTexto.backgroundColor = 0x252525;
         cajaTexto.border = true;
         cajaTexto.borderColor = 0x00FFFF;
         cajaTexto.defaultTextFormat = formatoTexto;
         cajaTexto.text = "Escribe el mesaje que quieras musicalizar";
         addChild(cajaTexto);

      }

      public function animarTexto():void
      {
      
      var formatoTextoAnimado:TextFormat=new TextFormat();
      formatoTextoAnimado.color = 0xFFFFFF;
      formatoTextoAnimado.size = 60;
      formatoTextoAnimado.align = 'left';
      formatoTextoAnimado.font = 'verdana';
      formatoTextoAnimado.leftMargin = 20;
      arguments;
      
      textoAnimado.text = cajaTexto.text;
      textoAnimado.x = 100;
      textoAnimado.y = 200;
      textoAnimado.width = 800;
      textoAnimado.height = 400;
      textoAnimado.defaultTextFormat = formatoTextoAnimado;
      textoAnimado.wordWrap = true;
      textoAnimado.visible=true;
      addChild(textoAnimado);
      }

      public function reproducirTexto(e:MouseEvent):void
      {


         textoPresentacion = cajaTexto.text;
         for (var i:int = 0; i < textoPresentacion.length; i++)
         {
            var sonido:LetraSonido = new LetraSonido  ;
            sonido.asignarLetra(textoPresentacion.charAt(i));
            arraySonidos.push(sonido);

         }
         temporizador.start();
         temporizador.addEventListener(TimerEvent.TIMER,detectorIntervalo);
      }

      public function detectorIntervalo(e:TimerEvent):void
      {

         arraySonidos[posicion++].iniciarSonido();
         if (posicion == textoPresentacion.length)
         {
            //posicion = 0;
            temporizador.stop();

         }

      }

   }
}


Clase Hija:

Código ActionScript :

package 
{
   import flash.media.Sound;
   import flash.media.SoundChannel;
   import flash.display.MovieClip;
   import flash.events.Event;
   import flash.net.URLRequest;
   import flash.text.TextField;
   

   public class LetraSonido extends MovieClip
   {
      var sonido:Sound;
      var canal:SoundChannel;
      var letraDefinida:String;

      public function LetraSonido()
      {
      }

      public function asignarLetra(letra:String):void
      {
         letraDefinida = letra;
         sonido=new Sound();
         var peticion:URLRequest = new URLRequest("letra_" + letraDefinida + ".mp3");
         sonido.load(peticion);
         trace(letraDefinida);
         trace("letra_" + letraDefinida + ".mp3");
      }

      public function iniciarSonido():void
      {
         sonido.play();
      }
   }
}


En el fla lo unico que tengo es el boton (btn_musical) que me activa los sonidos y al cual tambien quiero asociar la visualizacion.

Gracias compañeros. Espero ansiosa vuestra respuesta.
Un saludo.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 20 Ene 2011 10:17 am
BuenAS:

Comentar alguna cosilla:

Cuando añades los lístener, no crees tres, añade solo uno y llamas a los tres métodos:

Código ActionScript :

//deja sólo esta linea
btn_musical.addEventListener(MouseEvent.CLICK, clickHandler); 

//añade el controlador del evento CLICK
private function clickHandler(event:MouseEvent):void
{ 
   capturarTexto();
   reproducirTexto();
   animarTexto();
}


y quita el parámetro e:MouseEvent del método, ya que ahora no es un controlador de eventos.

Código ActionScript :

      public function reproducirTexto():void 
      { 
         textoPresentacion = cajaTexto.text; 
         for (var i:int = 0; i < textoPresentacion.length; i++) 
         { 
            var sonido:LetraSonido = new LetraSonido  ; 
            sonido.asignarLetra(textoPresentacion.charAt(i)); 
            arraySonidos.push(sonido); 
 
         } 
         temporizador.start(); 
         temporizador.addEventListener(TimerEvent.TIMER,detectorIntervalo); 
      } 


Por otro lado, en capturarTexto, reproducirTexto, animarTexto, creas los campos de texto. LLAVATE TODO EL CÓDIGO donde crees algo al constructor, o sea a la función llamada PresentacionMusical. Esto hará que crees los campos de texto SÓLO UNA VEZ y no cada vez que pulses.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 20 Ene 2011 11:13 am
Gracias Lukánicos por tu respuesta.
Sin embargo, he probado lo que me has dicho y me deja de funcionar lo de sacar el sonido de cada letra. En realidad lo que necesito (que no tengo ni idea de si se hace así o no) es que el campo de textoAnimado me recoja el mensaje que el usuario introduce desde cajaTexto y me lo muestre con una animación que puede ser del tipo textAnime (de Fluppie) o una animacion con vectores (que habría que crear).. o usar las propias letras como vectores...
Y es que no sé si ese campo de texto textoAnimado, debe ir en la clase principal PresentacionMusical o en la clase hija LetraSonido.
Intentaré de nuevo con lo que me envías a ver por qué me saca los errores que me saca.
Muchas gracias de nuevo por tu respuesta y en especial, por tu tiempo.
Un saludo,

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 20 Ene 2011 03:08 pm
Lo que quiero lograr es algo como esto:

http://rod524864.tripod.com/txt_fx5.html

capturar el texto del usuario cun un textField y sacar ese texto, animado, por otro textfield, con el textAnime de fluppie.
muchas gracias y un saludo.
keke

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox

 

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