Comunidad de diseño web y desarrollo en internet online

problema para duplicar moviclips de la escena

Citar            
MensajeEscrito el 17 Oct 2009 08:05 pm
Hola, ante todo gracias por todo lo bueno que voy encontrando por estos foro.

Bueno tengo un problema con un code que no me funciona, coji un ejemplo de Zguillez e intente hacer una variante pero no se porque los clips no se muestran en pantalla, la idea es duplicar un movieClip del stage tantas veces como quiera al estilo duplicateEmptyMovieClip del as2.0 aqui os dejo a ver si me podeis hechar un cable

este code esta dentro de una clase llamada dupliObject que luego importo dentro de la clase main, los objetos copia se crean bien pero no se muestran en pantalla.


Código ActionScript :

public function duplicateMovieClip(target:DisplayObject):void {

         var targetClass:Class;
         targetClass = Object(target).constructor;

         for (var i:uint=0; i < 10; i++) {
            var copia:DisplayObject = new targetClass();
            copia.transform = target.transform;
            copia.filters = target.filters;
            copia.cacheAsBitmap = target.cacheAsBitmap;
            copia.opaqueBackground = target.opaqueBackground;
            copia.name = "pruebas"+i;
            objArr.push(copia);
            objArr[i].x=20*i;
            addChild(objArr[i]);
         }
      }

Por giskard

110 de clabLevel



Genero:Masculino  

Programador y diseñador web

msie8
Citar            
MensajeEscrito el 18 Oct 2009 04:01 pm
Hola!

He estado luchando con as3.0 estos días y la verdad que no tiene mucho que ver con as2. También me encontre con este problema y lo he logrado solucionar...

El código que te dejo es para una clase que se llama Lista (extends MovieClip). También hace falta crear otra clase llamada Li (también extends MovieClip). Recurda que en la biblioteca del doc tendrás que habér vinculado el elemento Li con su clase Li.

Código ActionScript :

var arraylis:Array = new Array;

public function Lista(){
   for(var i:int = 0; i<10 ; i++){
      arraylis[i] = new Li;
      addChild(arraylis[i]);
      arraylis[i].y = i*50;
   }
}


Espero que te ayude!

PD: Llevo una semana en AS3 y ya estoy ayudando a la gente... That's crazy xD

Por jackbach

Claber

196 de clabLevel

1 tutorial

 

Barcelona

firefox
Citar            
MensajeEscrito el 18 Oct 2009 08:55 pm
hola, gracias por tu ayuda pero no es lo que estoy buscando, lo que quiero es duplicar un movieclip del stage tantas veces como quiera, y sin tener que utilizar code en el archivo fla solo desde la clase, en principio el code que postee tendria que hacerlo pero no muestra los objetos duplicados en pantalla, espero que alguien me pueda hechar una mano.

Por giskard

110 de clabLevel



Genero:Masculino  

Programador y diseñador web

msie8
Citar            
MensajeEscrito el 19 Oct 2009 06:47 am
Hay algo que no me gusta demasiado y es esas líneas

Código ActionScript :

var targetClass:Class; 
targetClass = Object(target).constructor; 

Aunque supongo que está bien, yo pondría

Código ActionScript :

var targetClass:Class =getDefinitionByName(getQualifiedClassName(target)) as Class;

Por otra parte, supongo que "objArr" es un array definido a nivel de película, vamos que tienes escrito en algún lado

Código ActionScript :

objArray:Array=new Array()

Por último, aunque no importe mucho, yo haría que el padre del objeto duplicado fuera el mismo que el padre del objeto original, vamos

Código ActionScript :

target.parent.addChild(objArr[i]);  //<---lo añadimos al "padre" de target

y definiría "copia" como un Object

Código ActionScript :

var copia:Object= new targetClass(); 

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Oct 2009 02:14 pm

giskard escribió:

hola, gracias por tu ayuda pero no es lo que estoy buscando, lo que quiero es duplicar un movieclip del stage tantas veces como quiera, y sin tener que utilizar code en el archivo fla solo desde la clase, en principio el code que postee tendria que hacerlo pero no muestra los objetos duplicados en pantalla, espero que alguien me pueda hechar una mano.

El codigo que te pasé no va en el fla, va en un archivo actionscript (Lista.as). Lo que hace el código es crear tantas instancias como quieras de un elemento en la librería, que se muestran en pantalla (concretamente dentro de otro movieclip al que llamo Lista).

Por jackbach

Claber

196 de clabLevel

1 tutorial

 

Barcelona

firefox
Citar            
MensajeEscrito el 19 Oct 2009 06:03 pm
hola eliseo gracias por tu ayuda e probado todo lo que as dicho pero me sigue sin funcionar ya demas ahora me produce errores que son los siguientes

dupliObject.as, line 165 1180: Call to a possibly undefined method getDefinitionByName.
dupliObject.as, line 165 1180: Call to a possibly undefined method getQualifiedClassName.

Bueno voy a intentar postear solo el code implicado en el problema a ver si asi os podeis hacer mejor una idea y hecharme un cable.

Tengo un fla donde tengo un movieclip con nombre de variable "barra" y en los settings as3 tengo deseleccionado la opcion de declarar variables de la escena automaticamente.

Despues tengo la clase main con nombre "jvmPlayer.as" donde tengo el siguiente codigo y ademas importo la clase "dupliObject".

Código ActionScript :

package {
                import flash.display.*;
   import files.objects.clases.dupliObjectClas.dupliObject;
   //-----------------------------------------------------------------
   public class jvmPlayer extends MovieClip {
      var dupli:dupliObject = new dupliObject;
                                public var barra:MovieClip;
      //---------------------------------------------------------------------
      public function jvmPlayer() {
         addChild(dupli);
         dupli.duplicateMovieClip(barra);   
      }
      
   }//endClass jvmPlayer

}//end package


y despues tengo tmb la clase "dupliObject.as" con el siguiente code que no me funciona.



Código ActionScript :

package files.objects.clases.dupliObjectClas{
   import flash.display.*;
      public class dupliObject extends MovieClip {
            public var objArr:Array;
      //-------------------------------------------------------------------------------------------------------------
      public function dupliObject() {
         objArr = new Array();
      }
      //---------------------------------------------------------------------------------
      public function duplicateMovieClip(target:DisplayObject):void {
                                                var targetClass:Class;
         targetClass = Object(target).constructor;
         for (var i:uint=0; i < 10; i++) {
            var copia:DisplayObject = new targetClass();
            copia.transform = target.transform;
            copia.filters = target.filters;
            copia.cacheAsBitmap = target.cacheAsBitmap;
            copia.opaqueBackground = target.opaqueBackground;
            copia.name = "pruebas"+i;
            objArr.push(copia);
            objArr[i].x=20*i;
            addChild(objArr[i]);         
                                                            }
                      }
        }//end class
}//end package


me tomado las molestias de elimianr todo el code innecesario que no tiene nada que ver con el problema espero que asi se hagan mejor idea de como resolverlo desde ya gracias de nuevo y espero que algun angel me ilumine :9

Por giskard

110 de clabLevel



Genero:Masculino  

Programador y diseñador web

msie8
Citar            
MensajeEscrito el 20 Oct 2009 07:38 am
Hola, bueno solo decir que conseguido solucionar el problema en parte, el codigo de arriba funciona bien en el momento que creo una clase llamada barra bacia y la importo a la clase dupliObject y creo una nueva instancia.

Código ActionScript :

package files.objects.clases{
   import flash.display.MovieClip;
   
   public class barra extends MovieClip {
      public function barra{
         
         }
      }
   }


pero sigo teniendo el problema de que lo que quiero hacer es duplicar cualquier movieclip de la escena sin necesidad de tener que crear sus respectivas clases de cada movieclip, osea si dibujo un cuadrado en la escena y lo convierto en movieclip quiero duplicarlo tal cual sin crear su clase o si cargo un swf dentro de un mc contenedor poder duplicar su contenido o todo el contenedor con su contenido espero que me ayuden un saludo.

Por giskard

110 de clabLevel



Genero:Masculino  

Programador y diseñador web

msie8
Citar            
MensajeEscrito el 20 Oct 2009 07:48 am
Bueno me acabo de dar cuenta que exportando el mc para actionscript el code funciona igual sin necesidad de crear la clase aunque supongo que flash la crea igual, te todas maneras si por ejemplo quiero cargar un mc en la escena dinamicamente si este no existe en la libreria y no esta configurado como exportar para actionscript como se podria duplicar?

Por giskard

110 de clabLevel



Genero:Masculino  

Programador y diseñador web

msie8
Citar            
MensajeEscrito el 20 Oct 2009 01:20 pm
[quote="jackbach"]

giskard escribió:

Recurda que en la biblioteca del doc tendrás que haber vinculado el elemento Li con su clase Li.

Que conste que te lo había dicho...

Por otra parte, que yo sepa no puedes duplicar algo que no sea un movieClip vinculado. Lo que si que puedes hacer es crear dinámicamente la forma que quieras desde as...

Hasta pronto!

Por jackbach

Claber

196 de clabLevel

1 tutorial

 

Barcelona

firefox
Citar            
MensajeEscrito el 20 Oct 2009 05:25 pm
La logica de copiar un objeto es hacer otra instacia de su clase, el codigo de "jackbach" crea muchas instancias de la clase "Li" como el la llamo, tu codigo es mas generico como no conoces la clase especifica a duplicar la funcion recibe como parametro el objeto a duplicar y a partir de este objeto obtiene su clase y crea una nueva instancia de esta es por eso que tu clip necesita exportarse para ActionScript por que si no estarias creando muchos MovieClips (clase de tu simbolo) y estos aunque los agregues a pantalla no tienen ningun grafico por eso se ven invisibles.

Sobre tu pregunta de duplicar un movieclip no linkeado a ninguna clase...no lo puedes hacer necesitas linkearlo a una clase propia.

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Oct 2009 05:30 pm
Si tu creas dinamicamente un MovieClip y dinamicamente vas configurando puedes guardar un historial de los cambios que le hagas...una vez con el mismo problema de duplicar Clips di con varios post que mandaban a Kirupa donde implementaban una clase que hacia esto.

Por Angel Roberto

Claber

248 de clabLevel



 

firefox

 

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