Comunidad de diseño web y desarrollo en internet online

Error de conversion forzada después de exportar objetos de mi librería

Citar            
MensajeEscrito el 02 May 2011 10:30 pm
Hola a todos,

Vengo de AS2 y acabo de empezar con el AS3, y tengo un lio padre.

Intento exportar una serie de objetos de mi librería y que se muevan por la pantalla el primero de ellos.

Los exporta correctamente, pero me da el error cuando intento hacer algo con ellos Error #1034: Error de conversión forzada: no se puede convertir objeto_0$ en flash.display.MovieClip.
at Who_fla::MainTimeline/empezarMovimiento()
at Who_fla::MainTimeline/frame1()
.

Código ActionScript :

//Meto en una array sus valores de class.
var objetos:Array = [objeto_0,objeto_1,objeto_2];
//este será el objeto que se esté moviendo
var objectActual:MovieClip = new MovieClip();

//la velocidad a la que se mueve
var velocidad:Number = 1.28;


//le digo que me exporte a escena los valores que le doy.
for (var i:int=0; i<3; i++)
{
   var item:MovieClip = new objetos[i]();
   addChild(item);
   item.x = stage.width/2+ i*100;
   item.y = stage.height/2- i*100;
}

function empezarMovimiento(obj)
{
   objectActual = obj;
   tiempo.start();
   tiempo.addEventListener(TimerEvent.TIMER, mover);
}

function mover(e:TimerEvent)
{
   objectActual.x +=  velocidad;
   if (objectActual.hitTestObject(colision))
   {
      e.currentTarget.removeEventListener(TimerEvent.TIMER, mover);
   }
}

empezarMovimiento(objeto[0]);



Agradezco cualquier ayuda. Estoy muy verde en esto y creo que tengo demasiados vicios de AS2 como para pensar con claridad!

un saludo,

Por Kabbal

7 de clabLevel



 

chrome
Citar            
MensajeEscrito el 03 May 2011 11:11 am
En realidad no puedes instanciar una clase directamente desde un string, tienes que hacer algo así:

Código ActionScript :

var classToConstruct:Class = classFromName(objetos[i]);
var item:MovieClip = new classToConstruct() as MovieClip


Si la base de los objetos de la librería es MovieClip debería andar, sino puedes quitar el cast

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 03 May 2011 07:45 pm

solisarg escribió:

En realidad no puedes instanciar una clase directamente desde un string, tienes que hacer algo así:

Código ActionScript :

var classToConstruct:Class = classFromName(objetos[i]);
var item:MovieClip = new classToConstruct() as MovieClip


Si la base de los objetos de la librería es MovieClip debería andar, sino puedes quitar el cast

Jorge


No me ha funcionado,
Me ha quedo así:

Código ActionScript :

for (var i:int=0; i<3; i++)
{
var classToConstruct:Class = classFromName(objeto[i]); 
var item:MovieClip = new classToConstruct() as MovieClip 

   addChild(item);
   item.x = stage.width/2+ i*100;
   item.y = stage.height/2- i*100;

}


Me devuelve el error: 1180: Call to a possibly undefined method classFromName.

El objetivo de esto es poder exportar varios MovieClip de mi librería y que se muevan en el eje x. Quizás le estoy dando demasiadas vueltas y es algo más sencillo, ¿tienes algún consejo?


Graais por todo!!!

Por Kabbal

7 de clabLevel



 

chrome
Citar            
MensajeEscrito el 03 May 2011 08:24 pm
Sorry, wrong method, sería así

Código ActionScript :

var classToConstruct:Object = flash.utils.getDefinitionByName(objetos[i]); 
var item:MovieClip = new classToConstruct() as MovieClip 
addChild(item)


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 May 2011 07:36 am
nada solisarg, lo entiendo y solo voy coleccionando errores.

Error #1065: No se ha definido la variable [class objeto_0].

No entiendo como puedo exportar varios objetos de mi librería :(

Pero muchas gracias por tu aportación!!!

Por Kabbal

7 de clabLevel



 

chrome
Citar            
MensajeEscrito el 04 May 2011 10:49 am
Este listado acá:

var objetos:Array = [objeto_0,objeto_1,objeto_2];

Deberían ser strings, y concretamente el nombre de la clase del MC que tienes en la biblioteca.
Proof of concept:

- En una peli nueva, dibuja un cuadrado, lo conviertes en MovieClip, y en el diálogo de avanzado (o dando click derecho en la librería) marcas exportar para ActionScript, le das nombre de instancia "cuadrado", cuando lo cierras te advierte que no encuentra la clase y que la creará automáticamente
- En el timeline pones esto:

Código ActionScript :

var classToConstruct:Object = flash.utils.getDefinitionByName("cuadrado");  
var item:MovieClip = new classToConstruct() as MovieClip  
addChild(item) 


¿Funciona? A revisar tu peli ...

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 05 May 2011 09:30 am
Gracias Jorge!

Así consigo importar todos los objetos pero solo mover uno, pero lo que necesito es poder mover varios objetos (no a la vez, si no en el momento que yo quiera):

En este ejemplo meto la función empezarMovimiento dentro del for. Pero voy a necesitar poder ejecutar la función en otro momento una vez por cada objeto.

Código ActionScript :

var objetos:Array = ["objeto_0","objeto_1","objeto_2"];

for (var i:int; i <3; i++)
{
   var classToConstruct:Object = flash.utils.getDefinitionByName(objetos[i]);
   var item:MovieClip = new classToConstruct() as MovieClip;
   item.name = objetos[i];
   addChild(item);
   empezarMovimiento(objetos[i]);
}


Esto me da el error: #1034: Error de conversión forzada: no se puede convertir "objeto_0" en flash.display.MovieClip.

Por Kabbal

7 de clabLevel



 

chrome
Citar            
MensajeEscrito el 05 May 2011 01:36 pm
¿La clase objeto_0 hereda de MovieClip?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 05 May 2011 02:47 pm

solisarg escribió:

¿La clase objeto_0 hereda de MovieClip?

Jorge


Si te refieres a que si el objeto en la librería tiene de base class flash.display.MovieClip, la respuesta es sí :)

Por Kabbal

7 de clabLevel



 

chrome
Citar            
MensajeEscrito el 05 May 2011 02:51 pm
No la castees a ver que pasa:

var item:Object = new classToConstruct();
(...)
empezarMovimiento(item);

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 09 May 2011 04:23 pm
Al final lo conseguí; gracias por todo Jorge

Código ActionScript :

var objects:Array = [objeto0,objeto1,objeto2];
var provisional:Array = new Array();

function ponedor(item:*, index:int, array:Array):void
{
   var itemz = item;
   var itemit:MovieClip = new itemz();
   provisional.push(itemit);
   addChild(itemit);
}
objects.forEach(ponedor);



La clave ha sido crear la array "provisional" y manipular los objetos desde ella en lugar de desde objects. No se por qué, pero oyes, por fin se me mueven!!!

un saludo,

Por Kabbal

7 de clabLevel



 

chrome
Citar            
MensajeEscrito el 09 May 2011 04:27 pm
Instancias un elemento y lo metes en un array, el array objects te sobra, con poner una variable numérica que diga cuantos querés innstanciar es suficiente, usas un for y ya. El punto era instanciar desde un string que tuviera el nombre de la clase, pero el caso no amerita esa complejidad

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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