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

Dolor de Cabeza y objetos

Estas en el tema de Dolor de Cabeza y objetos en el foro de Flash y Actionscript en Foros del Web. Saludos. Luego de haber leido un manual muy bueno, pero que esta bastante desordenado, logre entender muchas cosas de ActionScript, pero sin entender varias cosas ...
  #1 (permalink)  
Antiguo 21/03/2003, 19:07
 
Fecha de Ingreso: marzo-2003
Ubicación: Valencia, Venezuela
Mensajes: 23
Antigüedad: 21 años, 1 mes
Puntos: 0
Dolor de Cabeza y objetos

Saludos.
Luego de haber leido un manual muy bueno, pero que esta bastante desordenado, logre entender muchas cosas de ActionScript, pero sin entender varias cosas de los objetos, por ejemplo, como logo que existan propiedades o metodos publicos o privados? no logre entender bien si son publicos cuando se declaran con prototype, o el prototype sirve es para hacerlos privados, agradezco cualquier aclaratoria.
por otra parte estoy creandome un MovieClip a traves de objetos, es decir yo quiero crear una nueva clase que tenga todas las virtudes de los movie clip pero que implemente mis propios eventos como transiciones, alpha dsiminuido, y que ademas yo lo pueda dibujar a mi antojo, es decir hacer las imagenes que yo quiera.
para esto estoy haciendo lo siguiente:

MyMovieClipClass.prototype = new MovieClip; /* entendi del manual que creo una nueva clase MyMovieClipClass heredada de la Clase movie clip */
function MyMovieClipClass() { /* creo el constructor de mi nueva clase */
this.prototype._alpha=100;/* le doy el valor de 100 a alpha */
this.prototype.onEnterFrame = function() { /* genero el hilo de ejecucion para esta clase que hara al MovieClip cada vez mas claro hasta desaparecerlo */
this._alpha=this._alpha-10;
if (this._alpha<=0) { delete this.prototype.onEnterFrame;}
}
this.paint = function() {/*genero el metodo que pintara mi propio MovieClip */
beginFill (0x0000FF, 50);
lineStyle (5, 0xFF00FF, 100);
moveTo (200, 200);
lineTo (300, 300);
lineTo (100, 300);
lineTo (200, 200);
endFill();
}
}

MyMovieClip = new MyMovieClipClass;// Instancio mi Movie Clip
MyMovieClip.paint(); // mando a dibujarlo
MyMovieClip.onEnterFrame(); /* Lanzo el hilo para que se vaya haciendo mas claro hasta desaparecer */
Stop();

Ahora mi problema es que no hace nada, ni si quiera hereda de nadie, se que existe el MovieClip.createEmptyMovieClip, ahora el asunto es si segun la teoria del manual en forma general los movie clip se crean de la forma anterior, por que me cambias la señales ahora?, no existe consistencia?, se que pueden lograr una forma mas corta, pero deberia haber consistenacia, otra pregunta es, si se usa el ultimo metodo dicho, como creo mi nueva clase, con la herencia de la anterior ( de los MovieClip genericos) y con un mis nuevos metodos (MyMovieClipClass)?

Espero me entiendan y me aclaren ese punto, solo pido una cosa, que las respuestan sean consisas y centradas en las preguntas, ya que tanta libertad del lenguaje complica los conceptos cada vez mas, la verdad no quiero complicarme mas la vida.
"Si un codigo da muchos dolores de cabeza, hechalo a la basura, seguramente hay otra solución mas simple". Alen Acosta.

Esa es la realidad.
Gracias.

Alen Acosta
  #2 (permalink)  
Antiguo 22/03/2003, 17:13
 
Fecha de Ingreso: marzo-2003
Ubicación: Valencia, Venezuela
Mensajes: 23
Antigüedad: 21 años, 1 mes
Puntos: 0
Me respondo una pregunta

Saludos.
Ya que no he obtenido respuestas hasta el momento para aliviar parte de mi dolor de cabeza, y viendo que ha tenido algunas visitas el post, voy a responder una de mis interrogantes con el fin de mostrarles una solucion parcial al problema que yo mismo tenia.
Por cierto sigo sin entender sobre el prototype, me pueden explicar eso aun, por otra parte he visto algun codigo de los componentes de flash y no entiendo que les hace privados o publicos a los metodos y propiedades, esa pregunta pueden responderla tambien, Gracias
Ahora si con respecto al rollo de los objetos y el caso especial del movie clip, Segun Macromedia (tomado de un articulo de macromedia que no recuerdo cual fue), los Movie Clip no son considerados objetos como tal, por lo que no se les usa el metodo de objetos al que hacia referencia en mi pregunta, para los movieclip solamente se puede usar el metodo createEmptyMovieClip("NombreInstancia",NumerodePro fundidad); entre otros prefabricados, con esto se crea una instancia de un movieClip, hasta el momento todo muy bien el asunto planteado era como obtengo todos los beneficios de un movieClip (sobre todo el metodo onEnterFrame), y ademas agrego mis propias características, principalmente metodos para hacer el efecto de apagado, o movilizacion de movieclip, etc.
Entonces retomando, hasta el momento creamos una nueva instancia de un MovieClip (que segun macromedia, las clases son objetos ya encarnados, es decir, instancias, a diferencia de otros lenguajes que una clase se diferencia de su instancia), en fin, tenemos una instancia, el asunto es que se desea sobreescribir el metodo onEnterFrame (Override, en ActionScript no hace falta decirlo de manera explicita por los niveles de jerarquia que forman los objetos), para logar un efecto de desaparicion.
por otra parte deseo hacer un movieClip particular, es decir, que tenga la forma deseada y que no se haya puesto jamas sobre la "scena".
Para esto se escriben dos funciones generales que seran adjuntadas a cualquier elemento, las funciones seran paint() (que dibujara el objeto deseado), y onEnterFrame (que hara el efecto de desplazamiento en la linea de tiempo), finalmente estas funciones generales pasaran ahora a ser metodos del "Objeto" MyMovieClip, que es mi clip personal. esto se logara agregando a MyMovieClip.paint=_root.paint; (se usa _root ya que esta función fue definida en el nivel 0 y por orden de busqueda el interprete buscaria primero el metodo dentro de esta funcion y no en un nivel inferior), por otra parte adjuntaremos el metodo de transicion de la linea de tiempo onEnterFrame, de la siguiente manera: MyMovieClip.onEnterFrame=_root.onEnterFrame; (notese que en ninguna momento se esta escribiendo el par de parentesis cuando se hace la asignacion, en _root.onEnterFrame; se obvian los parentesis, esto se debe a que se realiza una asignacion mas no una ejecucion de una funcion, finalmente resta pintar nuestro propio movieclip y hacerlo desaparecer.
A continuación se mostrara el codigo que puede copiar y pegar en un nuevo proyecto de flash Mx, en un solo frame y con solo layer, es decir tal como se abra el proyecto solo hay que copiarlo seleccionando el unico frame que esta disponible y despues hacerlo correr.
En el primer Frame seleccionelo, luego seleccione el editor de codigo y pegue el siguiente programa:

function paint() { /*Funcion que pinta un triangulo, este codigo fue tomado de un ejemplo de pintar con funciones de Macromedia Flash, del manual de referencia de Flash, ojo solo estas funciones de pintado*/
beginFill (0x0000FF, 50);
lineStyle (5, 0xFF00FF, 100);
moveTo (this._x, this._y);
lineTo (300, 300);
lineTo (100, 300);
lineTo (this._x, this._y);
endFill();
moveTo(this._x,this._y);
lineTo(this._x+this._width,this._y);
}

/*esta funcion permite la transicion de la linea de tiempo, va haciendo transparente el movieClip al cual sera adjuntado*/
function onEnterFrame() {
this._alpha=this._alpha-10;
if (this._alpha<=0) {delete this.onEnterFrame}
}
/* Ahora si creamos la instancia deseada*/
/* con esta funcion creamos la instancia deseada, nuestro propio MovieClip, la unica diferencia es que por defecto este movieclip esta vacio con algunas propiedades pedefinidas, como visible en true, xscale en 100, width en 0, etc, a diferencia de otros lenguajes de programacion como ComponentPascal que todo lo envian a nil, o como Delphi que puede o no tener informacion valida, o c++ que deja cualquier informacion que se ubicara antes en ese trozo de memoria donde se esta cargando el nuevo, que por lo general era cero */
createEmptyMovieClip("MyMovieClip",0);/* el movie clip se llamara MyMovieClip y estara en el nivel 0 */
MyMovieClip.onEnterFrame = _root.onEnterFrame;/* se adjunta el metodo onEnterFrame a nuestro MovieClip */
MyMovieClip.paint=_root.paint; /* se adjunta el metodo de pintado de la instancia */
MyMovieClip.paint();/* ahora se manda a dibujar la instancia*/
MyMovieClip.onEnterFrame();/* se manda a hacer el efecto de paso en la linea de tiempo, virtualmente ya que fisicamente no se mueve la linea de tiempo, esto es un hilo de ejecucion o handler, un evento especial que se ejecuta independiente del resto del programa. */
Stop();/* se detiene las linea de tiempo fisica y suceden los efectos que se quieren */



Por otra parte existe la forma de adjuntar eventos a un movieclip o su caso especial un Boton, a través de la insercion o registro del elemento en el listener del Key, para mirar cuando se presiona una tecla, en cualquier instancia creada en tiempo de ejecución y propia (personal). Pero esto es algo que debo mirar un poco mas para explicarlo, ya que la verdad voy por paso, y este era el primer paso que queria avanzar.

Alen Acosta.
  #3 (permalink)  
Antiguo 22/03/2003, 17:24
 
Fecha de Ingreso: marzo-2003
Ubicación: Valencia, Venezuela
Mensajes: 23
Antigüedad: 21 años, 1 mes
Puntos: 0
Pueden eliminar los comentarios y veran lo corto que es, solo que una animacion completa se hace bastante compleja, pero debe haber otra forma mas simple de hacerlo, en eso seguire trabajando en encontrarla.
__________________
"Todo algoritmo es simple por naturaleza ya que desciende de la intuicion y abstracion logica, asi, si un algoritmo se complica llevalo a la basura, seguramente hay una solucion mas simple..." Alen Acosta.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:49.