Foros del Web » Creando para Internet » Flash y Actionscript »

Cargar múltiples MC

Estas en el tema de Cargar múltiples MC en el foro de Flash y Actionscript en Foros del Web. Buenas tardes a todos, Estoy tratando de importar a escena una serie de clips a los que he nombrado de la siguiente forma: cartas_0_0 cartas_0_1 ...
  #1 (permalink)  
Antiguo 08/10/2010, 13:04
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 13 años, 11 meses
Puntos: 11
Cargar múltiples MC

Buenas tardes a todos,

Estoy tratando de importar a escena una serie de clips a los que he nombrado de la siguiente forma:

cartas_0_0
cartas_0_1
cartas_0_2
.
.
.
cartas_9_4

Es una baraja de 10 palos con 5 cartas por palo.

Al ser 50 MC los que quiero importar, no es cuestión de ir metiéndolos uno a uno. Con AS2 podía usar nombres de variables dinámicos, pero con AS3 no sé como hacerlo. Llevo horas buscando en internet y he encontrado clases en AS3 que me permiten importar un clip, he estado jugando con ellas y tengo algo como esto:

Código actionscript:
Ver original
  1. package {
  2.     import flash.display.MovieClip;
  3.     import flash.display.Sprite;
  4.     //
  5.     public class Main extends MovieClip {
  6.         private var _root:MovieClip;
  7.         private var cardInstance_:Sprite;
  8.         private var cartas_:Sprite;
  9.  
  10.            
  11.         //
  12.         public function Main(ruta:MovieClip) {
  13.             _root = ruta;
  14.             //
  15.             var i:int;
  16.             var j:int;
  17.             var a;
  18.                 for (i=0;i<=9;i++){
  19.                     for (j=0;j<=4;j++){
  20.                        
  21.                         cardInstance_ = new Sprite();
  22.                         cardInstance_.name = "cardInstance_" + i + "_" + j;
  23.                         cartas_ = new Sprite();
  24.                         cartas_.name = "cartas_" + i + "_" + j;
  25.                         trace (cartas_.name);
  26.                         addChild( cardInstance_ );
  27.                         addChild( cartas_ );
  28.                         getChildByName("cardInstance_"+i+"_"+j).x = 500;
  29.                         getChildByName("cardInstance_"+i+"_"+j).y = 20;
  30.                         _root.addChild(getChildByName("cardInstance_"+i+"_"+j));
  31.        
  32.                     }
  33.                 }
  34.         }
  35.     }
  36. }

Entiendo que algo me debe faltar porque aunque no me da error de compilación, no se muestran las cartas.

Gracias de antemano por su ayuda

Última edición por dvpareja; 08/10/2010 a las 14:35 Razón: Resaltador de código
  #2 (permalink)  
Antiguo 08/10/2010, 23:37
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 8 meses
Puntos: 214
Respuesta: Cargar múltiples MC

Hola
as3 y usan _root!!
primera vez que veo eso!!

bueno, pues en as3 hay varios modos, pero el más 'similar'
para con as2 sería este

Código actionscript:
Ver original
  1. //res es un movieclip de librería que esta exportado y en Class tiene el valor 'res'
  2. var ClassReference:Class = getDefinitionByName("res") as Class;
  3.         var mc:Object = new ClassReference(); //mc es la instancia creada
  4.         mc.y = 100; // asigno posición en y
  5.         mc.caja.text = 'hola'; //asigno valor a campo de texto del movieclip
  6.         addChild(DisplayObject(mc)); //lo agrego al stage

y pues claro, esto estaría en un for de tantas cartas como necesites,
y el "res" como son N cartas, pues usaría un array, y aprovechando el for,
pues pondría ese array como parámetro del getDefinitionByName
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 09/10/2010, 06:48
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 13 años, 11 meses
Puntos: 11
Respuesta: Cargar múltiples MC

Muchas gracias por tu respuesta, el código me quedó así y funciona perfectamente
Código ACTIONSCRIPT:
Ver original
  1. package {
  2.     import flash.utils.*;
  3.     import flash.display.MovieClip;
  4.     import flash.display.DisplayObject;
  5.    
  6.     public class Main extends MovieClip {
  7.       private var ClassReference:Class;
  8.       private var mc:Object;
  9.       private var mc_Array:Array;
  10.        
  11.         public function Main():void {
  12.  
  13.         var mc_Array:Array = new Array(); //mc_Array es una matriz que contiene todos los mc ordenados
  14.         //cartas_i_j es un movieclip de librería que esta exportado y en Class tiene el valor 'cartas_i_j'
  15.             for (var i:Number=0;i<=9;i++){
  16.                 for (var j:Number=1;j<=5;j++){
  17.                     var ClassReference:Class = getDefinitionByName("cartas_"+i+"_"+j) as Class;
  18.                     var mc:MovieClip = new ClassReference(); //mc es la instancia creada
  19.                     mc_Array.push([mc]); // introduczo los mc en mc_Array
  20.                 }
  21.             }
  22.             DesordenarArray(mc_Array); // Desordeno el Array
  23.            
  24.             for (var n=1;n<mc_Array.length;n++) {
  25.             // AQUI QUIERO MOSTRAR LOS CLIPS
  26.             }    
  27.                  
  28.         } // end Main
  29.  
  30.         private function DesordenarArray(array):void {
  31.                var elementos=array.length;
  32.                for (var i=elementos-1;i>1;i--){
  33.                   var alea:int=Math.floor(i*Math.random());
  34.                   var temp:Object=array[i];
  35.                   array[i]=array[alea];
  36.                   array[alea]=temp;
  37.                 }
  38.             }
  39.  
  40.  
  41.     } // end Class
  42. } // end Package

El problema que me surge ahora es que si uso

Código ACTIONSCRIPT:
Ver original
  1. addChild(DisplayObject(mc_Array[n]));

para agregar las cartas desordenadas, me da este error:

TypeError: Error #1034: Error de conversión forzada: no se puede convertir []@30ffaf1 en flash.display.DisplayObject.

¿Me podríais decir qué hago mal?

Gracias de nuevo
  #4 (permalink)  
Antiguo 09/10/2010, 11:22
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 13 años, 11 meses
Puntos: 11
Respuesta: Cargar múltiples MC

Ok, solucionado este problema, el código me quedó así (acepto sugerencias)

Código ACTIONSCRIPT:
Ver original
  1. package {
  2.     import flash.utils.*;
  3.     import flash.display.MovieClip;
  4.     import flash.display.DisplayObject;
  5.    
  6.     public class Main extends MovieClip {
  7.       public var ClassReference:Class;
  8.       public var mc:Object;
  9.       public var mc_Array:Array;
  10.        
  11.         public function Main():void {
  12.  
  13.         var mc_Array:Array = new Array(); //mc_Array es una matriz que contiene todos los mc ordenados
  14.         //cartas_i_j es un movieclip de librería que esta exportado y en Class tiene el valor 'cartas_i_j'
  15.             for (var i:Number=0;i<=9;i++){
  16.                 for (var j:Number=1;j<=5;j++){
  17.                     var ClassReference:Class = getDefinitionByName("cartas_"+i+"_"+j) as Class;
  18.                     // introduzco en un Array todas las instancias de los movieClip
  19.                      mc_Array.push({mc:new ClassReference(),name:"cardInstance_"+i+"_"+j});
  20.                 }
  21.             }
  22.             DesordenarArray(mc_Array); // Desordeno el Array
  23.            
  24.             for (var n=0;n<mc_Array.length;n++) {    // Posiciono las cartas en la Escena Convenida
  25.                 mc_Array [n].mc.x = 500;
  26.                 mc_Array [n].mc.y = 20+n;
  27.                 addChild(mc_Array [n].mc);
  28.                 // trace (mc_Array [n].mc.name)
  29.             }    
  30.                  
  31.         } // end Main
  32.  
  33.         private function DesordenarArray(array):void {
  34.                var elementos=array.length;
  35.                for (var i=elementos-1;i>1;i--){
  36.                   var alea:int=Math.floor(i*Math.random());
  37.                   var temp:Object=array[i];
  38.                   array[i]=array[alea];
  39.                   array[alea]=temp;
  40.                 }
  41.             }
  42.  
  43.  
  44.     } // end Class
  45. } // end Package

Sin embargo, no me hace caso a la hora de darle nombre a las instancias que agrego en al Array, me pone el nombre genérico de Instance1, Instance2 ....

¿Sabe alguien como darle el nombre a la instancia antes de desordenar el Array?
  #5 (permalink)  
Antiguo 09/10/2010, 12:14
Avatar de TMeister
Crazy Coder
 
Fecha de Ingreso: enero-2002
Ubicación: En la Oficina
Mensajes: 2.880
Antigüedad: 22 años, 4 meses
Puntos: 193
Respuesta: Cargar múltiples MC

Cambia esto
Código Actionscript:
Ver original
  1. mc_Array.push({mc:new ClassReference(),name:"cardInstance_"+i+"_"+j});

por

Código Actionscript:
Ver original
  1. var mc_tmp = new ClassReference();
  2. mc_tmp.name = "cardInstance_"+i+"_"+j
  3. mc_Array.push({mc: mc_tmp});

Similar pero no lo mismo =)
  #6 (permalink)  
Antiguo 09/10/2010, 14:20
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 13 años, 11 meses
Puntos: 11
Respuesta: Cargar múltiples MC

Muchas Gracias a todos. Arreglado !!

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:30.