Google Web after-hours

Contador en flash JSFL Traductor
/*
clone
duplica un clip de pelí cula n veces
@param c número de copias
@param x posición x del clip
@param y posición y del clip
*/

MovieClip.prototype.clone = function(c, x, y) { // – if (c == undefined) { return; } // – this.x = x; this.y = y; this.c = Number©; this.r += 1; // – this.x == undefined ? this.x=this._x+this._width+5 : “”; this.y == undefined ? this.y=this._y : “”; // – for (i=0; i<this.c; i++) { duplicateMovieClip(this._name, this._name+i, i+100); copia = _root[this._name+i]; copia._x = this.x; copia._y = this.y; this.x += (this._width+5); } }; // – ejemplo de utilización clip.clone(5,10,10);

9 Responses to 'FlashMX Clone prototype'

  1. Buti Says:

    Muy útil, lo pillo si no te importa…

    Una duda: ¿es posible copiar/duplicar un clip en una ruta determinada?

  2. tonilopez Says:

    Tendriamos que modificar el prototipo o crear una clase con más métodos. Tal y como está no.

  3. Joseba Alonso Says:

    Siento decirlo, pero esto:

    this.x == undefined ? this.x=this._x+this._width+5 : “";

    Me parece una practica pesima. Veo mucho mas correcto lo siguiente:

    this.x = x ? x : this._x+this._width+5;
    this.y = y ? y : this._y;

    Pero utilizar el operador ternario como si fuera un if…

    un saludo

  4. tonilopez Says:

    Joseba,

    Seguro que tienes toda la razón, ahora bien, ¿podrí as argumentarlo?

    Te lo agradecerí a mucho, pues no entiendo muy bien tu planteamiento, por otra parte, si estoy haciendo un uso incorrecto del operador ternario (yo lo llamaba condicional) me gustarí a corregirlo.

    Gracias

  5. Joseba Alonso Says:

    El problema es basicamente que el operador ternario o condicional es un operador de asignacion, no es una estructura de control. Vamos, que se usa para asignar un valor a una variable dependiendo de una condicion.

    var a = (b>5) ? 1 : 0;

    Pero tu lo estas usando como un if

    this.x == undefined ? this.x=this._x+this._width+5 : “";

    seria

    if(!this.x)this._x+this._width+5;

    si usas el operador ternario para hacerlo lo unico que consigues es que tu codigo sea menos legible y con mas bytecode.

    En tu caso yo cambiaria las dos lineas y simplificaria mas las operaciones, por ejemplo no te hace falta almacenar las variables x e y en el objeto ya que una vez usadas son inutiles:
    MovieClip.prototype.clone = function(c, x, y) {
    if (!c)return; // No hace falta el undefined
    // Las anteriores sentencias con el op ternario
    if(!x)x=this._x+this._width+5;
    if(!y)y=this._y;
    c = Number©;
    this.r += 1; // Esta no se que utilidad tiene
    var initobj;
    for (var i=0; i<c; i++) {
    // El objeto de inicializacion para la duplicacion
    initobj = {_x:x+((this._width+5)*i),_y:y};
    this.duplicateMovieClip(this._name+i,i+100,initobj);
    }
    };

    a ver si esto no se corta…
    Siento el retraso en la respuesta, un saludo

  6. tonilopez Says:

    Joseba, muchas gracias por tus consejos, toda una lección. :)

    Joseba:
    this.r += 1; // Esta no se que utilidad tiene

    Toni
    Yo tampoco :o

    saludos!

  7. tostadense Says:

    propongo usar un par de parámetros más para controlar el desplazamiento:

    //
    MovieClip.prototype.clone = function(c, x, y, dx, dy) {
    if (!c) {
    return;
    }
    // No hace falta el undefined
    // Las anteriores sentencias con el op ternario
    if (!x) {
    x = this._x+this._width+5;
    }
    if (!y) {
    y = this._y;
    }
    c = Number©;
    this.r += 1;
    // Esta no se que utilidad tiene
    var initobj;
    for (var i = 0; i<c; i++) {
    // El objeto de inicializacion para la duplicacion
    initobj = {_x:x+dx*i, _y:y+dy*i};
    this.duplicateMovieClip(this._name+i, i+100, initobj);
    }
    };
    //USO
    // miMC.clone(nº copias, iniX, iniY, desplazamientoX, desplazamientoY)
    miMc.clone(10, 100, 100, 5, 5);
    //miMc.clone(10, 100, 100, miMc._width+5, 0);
    //miMc.clone(10, 100, 100, 0, miMc._height+5);
    //miMc.clone(10, 100, 100, miMc._width+5, miMc._height+5);

    saludos

  8. alberto Says:

    hola ke tal toni, estoy encantado con tu web es la mejor ke e encontrado para los ke no sabes mucho de actionscript e visto este tutorial de duplicar clip de peliculas lo ke pasa es ke no me funciona como yo kiero pues el clip ke yo tengo dentro de el tiene una interpolacion en movimiento y cuando termina la interpolacion vuelve a empezar y solo me lo duplica una vez pefectamente pero cuando termina empieza desde cero y no se como hacer para ke eso no ocurra tambien agradeceria si pusieras un tutorial de formularios en flash y php para enviar la informacion de los campos a un email pues los ke e encontrado o estan super mal explicados o no funcionan bueno muchas gracias por leerme y espero respuesta y muchas suerte con la web puesto ke es la mejor ke e encontrado bye

  9. tonilopez Says:

    Hola Alberto, gracias por tus palabras :)

    Aquí hay un formulario bastante sencillo:

    http://www.after-hours.org/blog/archives/000199.html

    El tema del preloader, dja que me lo mire.

    Saludos