Comunidad de diseño web y desarrollo en internet online

subTextField's dinamicos

Citar            
MensajeEscrito el 05 Oct 2017 11:19 am
¡Buenas tardes y gracias de antemano por la ayuda!
Os cuento tengo una funcion que crea circulos y dentro de estos un cuadro de texto para cada circulo:

Código ActionScript :

function nuevaRedonda()
{

   redondas = redondas + 1;
   var nuevaRedonda = new redonda  ;

   nuevaRedonda.name = "redonda" + redondas;
   nuevaRedonda.addEventListener(MouseEvent.MOUSE_UP, levantar);
   redondasS.addChildAt(nuevaRedonda,0);

   var idemR:Array=new Array();
   idemR[redondas]=new TextField();
   idemR[redondas].text = "Caja " + (redondas + 1);
   nuevaRedonda.addChild(idemR[redondas]);

   var idemR:Array=new Array();
   var idemR[redondas] = new TextField();
   nuevaRedonda.addChild(idemR[redondas]);
   idemR[redondas].text = "Prueba";
}


Hasta ahí todo bien, el problema lo tengo al intentar cambiar esos cuadros de texto fuera de la funcion. Tengo otra funcion que se activa al levantar el ratón y es donde quiero cambiar el texto pero al compilar me lanza este error en esa linea:

Código ActionScript :


function levantar(e:MouseEvent)
{
idemR[redondas].text = entrada_comensales.text;
}


Acceso a una propiedad IdemR no definida

Le he dado mil vueltas pero no veo cual es mi error. Me podriais ayudar. Gracias otra vez

Por sapafazo

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Oct 2017 11:49 am
Ya localizé el error, la declaracion del Array debe estar fuera de la funcion para que sea accesible al resto del codigo:

Código ActionScript :

var idemR:Array=new Array();

Por sapafazo

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Oct 2017 02:36 pm
Me he vuelto a atascar, el problema que me encuentro ahora es que se modifica el TextField actual pero tambien los otros del resto de circulos.

La funcion que hace que los modifique es esta, la he intentado simplificar un poco por si os es mas facil localizar el error.


Código ActionScript :

function levantar(e:MouseEvent)
{
   var salida:Boolean = (new Date().time - ms > 200) ? true : false;
/*Crea un temporizador para diferenciar el arrastre del toque.*/
   e.currentTarget.stopDrag();
   var ml:MovieClip;
   ml = e.currentTarget as MovieClip;



   if (ml.hitTestObject(marcos))

/*Si al finalizar el arrastre toca contra el marco donde se crean los circulos y viene de alli lo mueve a la posicion de ellos. */

   {
      if (ml is redonda)
      {
         ml.x=872,85;;
         ml.y = 653,50;
         if (tocaMarcos = false)
         {
            contenedor.removeChild(ml);
            marco.addChild(ml);
         }
      }
   }
   else
   {
      if (tocaMarcos == true)
/*Si viene del marco hacia el mapa. lo agrega a este ultimo y crea una nueva redonda.*/
      {
         if (ml is redonda)
         {
            nuevaRedonda();
         }

      }
      else
      {
      }
   }

   if (salida==false)
/*Por último si es un click y no un arrastre (salida==false) comprueba si es un objeto redonda y si el TextField de entrada tiene algo, si es asi modifica el TextField de la misma redonda. O eso deberia hacer :( porque en realidad mofica todos los TextField de todas las redondas*/
   {
      
         ok.addEventListener(MouseEvent.MOUSE_UP,pasarComensales);
         function pasarComensales(e:MouseEvent)
         {
            
            if (entrada_comensales.text == "")
            {
               trace("nada");
            }
            else
            {
               trace("algo");
               if (ml is redonda)
               {
                  
                  
                  trace("es "+ml.name.substring(7))
                  var numR:int=int(ml.name.substring(7));
                  idemR[numR].text = entrada.text;
                  ml.addChild(idemR[numR]);


               }

            }
         }
      
   }
   if (salida = true)
   {

   }
}


Gracias de antemano!

Por sapafazo

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Oct 2017 04:56 pm
No veo que uses event.target para apuntar e una instancia ni la palabra clave this como autoreferencia. Suponiendo que tenga 100 MC con un campo de texto llamado nombre, puedo hacer que muestren su nombre asi (el nombre es "mc1, mc2 .... mc100")

Código ActionScript :

for(var i:number=1; i<=100; i++){
  this["mc"+i].addEventListener(MouseEvent.MOUSE_OVER, onOver)
}
function onOver(evt:MouseEvent){
  this.nombre.text = "Soy "+this.name
}


Hace bocha que no escribo AS, puede que this.nombre te de error con el compilador estricto, usa notacion de array this['nombre'], pero esa es la idea

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Oct 2017 02:02 pm
El error estaba en esa referencia.Al referirme a ml como todos los MovieClips de redonda, el cambio se hacia en todos ellos, al referenciarlos por separado funciona correctamente

Muchisimas gracias Jorge!!

Por sapafazo

2 de clabLevel



 

firefox

 

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