¿Cómo llamar a instancias de CS3 desde FlashDevelop?
3 seguidores
En el stage de Flash CS3 tengo 2 instancias:
Un label_txt y un clip_mc
¿Puedo trabajar con estas desde FlashDevelop?.
¿Qué tengo que hacer para que FlashDevelop me acepte?:
label_txt.text = "hola";
No quiero crear los objetos en FlashDevelop sino en CS3 y luego escribir el código en FlashDevelop.
S2.
elsuricatorojo
Hay muchas formas. Si trabajas con herencia create una clase que extienda el MovieClip que contiene a label_txt. Si trabajas con composición lo suyo es en la contructura pasarle el movieclip de referencia como parametro y trabajar a partir de ese movieclip referencia.
A proposito es AS2 o AS3?
Yo, por ejemplo, trabajo en AS2 y prefiero la segunda forma (composición).
randomize
Trabajo con AS3.
¿Puedes eseñarme algun ejemplo con la segunda opción que comentas?
En flashDev creo un proyecto default:
<code>package {
import flash.display.MovieClip;
public class main{
public CAJA_mc:MovieClip = new MovieClip();
public function main() {
CAJA_mc.x = 0;
CAJA_mc.y = 0;
}
}
}</code>
Y en CS3 tengo la instancia del MovieClip a la que he llamado CAJA_mc
Pero el código anterior no coloca el MovieClip en la posición que le digo.
S2.
elsuricatorojo
Yo no he migrado todavía a AS3 pero viendo tu código me sobra el "new MovieClip". Con el new creas la instancia y si la tienes en el timeline ya está creada. Vamos que es bueno typear "CAJA_mc" como MovieClip pero no tienes que crearla.
Otra cosa, si esta clase "main" es el "document class" creo que debe extender MovieClip.
<code>public class Main extends MovieClip</code>
..y por último me falta un "var":
<code>
package {
import flash.display.MovieClip;
public class main extends MovieClip{
public var CAJA_mc:MovieClip
// CONSTRUCTORA:
public function main() {
CAJA_mc.x = 0;
CAJA_mc.y = 0;
}
}
}
</code>
lo de pasar un mc de referencia sería algo así:
<code>
package {
import flash.display.MovieClip;
public class MiClase{
public var ref_mc:MovieClip
// CONSTRUCTORA:
public function MiClase(ref:MovieClip) {
ref_mc=ref
ref_mc.CAJA_mc.x = 0;
ref_mc.CAJA_mc.y = 0;
}
}
}
</code>
Pero creo que esto no te vale para el caso de Document Class, que repito creo recordar debe externder MovieClip.
tpmmds
Hola:
Me da la sensación de que pretendes hacer un proyecto FD independiente de Flash, y lo que quieres hacer es utilizar en él símbolos (en este caso un movieClip) hecho en Flash. Para esto, lo más conveniente es exportar para ActionScript el movieClip, o movieClips, y crear una biblioteca compilada (pulsa en Preferencias en el panel Propiedades y activa Exportar SWC). Cuando compiles la película Flash se crea un swf, y un swc que es la biblioteca compilada.
En FD incluye esta biblioteca swc en el proyecto, seleccionala y elige Add to library. Ahora puedes instanciar los símbolos que tenías en la biblioteca:
var caja_mc:MovieClip = new CAJA_mc();
addChild(caja_mc);
caja_mc.x = 10;
caja_mc.y = 120;
Otra opción es utilizar Embed, y el archivo swf:
[Embed(source="biblioteca.swf#CAJA_mc)]
private var CAJA_mc:Class;
y ya en el código, puedes hacer lo mismo de antes:
var caja_mc:MovieClip = new CAJA_mc();
Otra opción que se me ocurre es que estés utilizando FD como "sustituto" del IDE de Flash para escribir código, entonces, en el campo de texto Clase documento deberías escribir el nombre de esta clase y guardar el archivo Fla en LA MISMA CARPETA que esta clase. En este caso, no tendrías que instanciar el movieClip, como dice elSuricatoRojo, ya que lo tienes en el escenario y puedes referirte a él por el nombre de instancia que le has dado (pero me parece que no es el caso, porque no tendrías estos problemas ;-) )
Un saludo.
randomize
Gracias por las respuesta.
En realidad lo que quiero es trabajar en CS3 pero con un editor como el de FD.
Lo que me comentais está bien pero no hay algún parche o similar que mejore el editor de CS3?
S2.
tpmmds
Hola:
No hay mayor problema en utilizar FD o Flex para escribir código en vez del IDE de Flash. Lo único, tienes que escribir en el campo Clase documento del panel Propiedades de Flash el mismo nombre de la clase principal que se haya creado en el proyecto FlashDevelop o Flex Builder, para "enlazar" Flash con la clase.
Pero, aunque pueda parecer lo contrario en un principio, te aseguro que ahorras mucho más tiempo creandote una biblioteca compilada y añadiéndola al proyecto FD o Flex que estés haciendo.
Y aparte del tiempo que se ahorra tiene la ventaja de separar la etapa de diseño, de la etapa de programación: si estás en Flash, estás diseñando la parte visual de la aplicación; si estás en FlashDevelop estás escribiendo código :-)
Y otra ventaja de utilizar swc's: en una aplicación es muy frecuente utilizar elementos gráficos de otras (si siempre utilizamos los mismos botones :-) ). Si ya tienes el swc, no tienes que andar abriendo Fla's, pasando símbolos de una biblioteca a otra, etc. Símplemente añades los swc a tu proyecto y a funcionar.
Un saludo.
tpmmds
Hola:
Aquí tienes dos ejemplos, uno para el IDE de Flash, y otro como un proyecto AS3:
Descargar código para FlashDevelop
El proyecto para Flash debes configurarlo para papervision3D. Si no tienes las clases, puedes bajarlas de aquí:
Clases PV3DGreatWhite
Te recomiendo que empieces a ver el proyecto AS3 primero, verás que funcionas más rápido que con el IDE ;-)
Ver ejemplo
Un saludo
randomize
Vaya, muchas gracias por tu explicación ahora entiendo la forma de trabajar.
Tengo una duda respecto al código que habéis puesto:
<code>var caja_mc:MovieClip = new CAJA_mc();</code>
Yo antes ponía:
var caja_mc:CAJA_mc = new CAJA_mc();
¿Daría lo mismo?
S2.
tpmmds
Hola:
Sí, da lo mismo, porque CAJA_mc es un MovieClip. En POO es el equivalente a un señor de Cáceres, que es extremeño y Español. Le puedes decir que es un español, y un extremeño, y no se ofende , no sé si te vale este ejemplo.
Un saludo
elsuricatorojo
Como randomize sea de Hernani lo mismo no le vale :-)
tpmmds
Sí, por eso lo he ubicado en Cáceres :-)
tpmmds
Hola:
Otra ventaja de FlashDevelop/Flex builder: Tienes una forma muy rápida de vér qué tecnología han utilizado en una página web con Flash, (y sin decompilar la aplicación, un método que puede rozar la "ilegalidad" :-) ). Añades el swf al proyecto y puedes ver todas las clases que han utilizado, siempre que no esté ofuscado el código.
Así no hay posibilidad de error al decir si algo "es papervision3D" o está hecho con Flash MX 2004.
Por ejemplo, ahora en esta entrada de CoolSites:
THE ECO ZOO
Hay gente preguntando si es PV3D, y si alguien sigue con dudas: NO ES, SEGURO.
Un saludo
randomize
Hola de nuevo. Me ha surgido uno problema a la hora de trabajar asi, es sobre definir una variable global.
En CS3 dentro de la biblioteca tengo un movieClip, dentro de el he puesto un código en la línea de tiempo, esté código llama a una variable que se encuentra en al archivo.as donde tengo todo el código.
El problema es que cuando le doy a compilar en CS3 me dice que no encuentra esta variable a pesar de ser pública.
Solo utilizo CS3 para crearme un biblioteca de movievclips, imágenes,... .No enlazo el fla con el documento class (aun haciendolo me da el mismo error). Estoy escribiendo todo el código en FlashDevelop.
S2.
tpmmds
Hola:
Esto parece que es más un problema de cómo tengas estructurado tu código. Imagino que deberías pasar al código que has colocado en la línea de tiempo el nombre de una instancia de la clase archivo.as, o utilizar una propiedad estática de dicha clase para referirte a ella.
Y también suele haber un problema cuando se escribe código en la línea de tiempo: asegurate que la cabeza lectora ha pasado por el keyframe donde está el código, antes de referirte a él, porque si no es el caso, dicho código no existe para Flash Player.
Un saludo.
randomize
Gracias tpmmds, como comentabas solo necesitaba utilizar una variable estática.
S2.