Math.random(): Situar aleatoriamente un clip de pelÃcula
actionScript, Prototypes | Septiembre 3rd, 2005Versión para imprimir
Dificultad
Nunca sabremos cuando un par de sencillas lÃneas de código ayudarán a hacer más fácil nuestro trabajo. Un ejemplo de ello, es este script que genera aleatoriamente las posiciones _x e _y para un clip de pelÃcula.
Lo interesante, es que el script puede aplicarse tanto a un clip que está situado en _root como a un clip de pelÃcula contenido en otro clip de pelÃcula (siempre indicando la ruta completa)
El script es el siguiente:
MovieClip.prototype.random_position = function() {
x = (this._parent._width-this._width);
y = (this._parent._height-this._height);
this._x = (Math.floor(Math.random()*x));
this._y = (Math.floor(Math.random()*y));
};
Modo de uso;
miclip_mc.random_position();
Como puedes ver, solo necesitas enviar a la función el nombre del clip de pelÃcula. Como es lógico, necesitamos poner un lÃmite a la posición que ocupará nuestro clip, es decir, impedir que este salga del área que ocupa el clip que lo contiene (incluso si se trata de _root).
La función Math.random() nos lo pone fácil:
Para establecer el lÃmite mÃnimo (izquierda/superior) sabemos que random() arroja un valor entre 0 y el argumento que enviamos menos uno, p.e trace(Math.random()*8) retorna cualquier valor que esté entre 0 y 7 (argumento - 1)
En cuanto al lÃmite máximo (derecha/inferior) nos basamos en el tamaño del clip de pelÃcula contenedor width/height menos el ancho y alto del clip de pelÃcula contenido.
Asà pues, si tenemos un documento de 500x400 (contenedor) y utilizamos el prototypo random_position con un clip de pelÃcula cuyas dimensiones son 200x200, podriamos interpretar la función como:
x = (500-200); // -- 300
y = 400-200); // -- 200
this._x = (cualquier número entre 0 y 300);
this._y = (cuaquier numero entre 0 y 200);
Ejemplo 1
En este caso, un clip de pelÃcula (rectángulo negro) contenido en un clip de pelÃcula (cuadrado gris)
Ejemplo2
Un clip de pelÃcula en _root
Descargar ejemplos » (803 hits)
http://www.after-hours.org/blog/2005/actionscript/protorandomposition/archivos.zip
Septiembre 27th, 2005 at 4:01 am
Febrero 2nd, 2006 at 12:12 pm
i have a problem!
estoy usando el prototype de esta forma… y no me funciona:
for(x=0;xmyMC[x].random_position();
//myMC[x]._x = (myMC[x]._width*x);
}
//prototype que asigna a un MC una posición X e Y aleatorias en el escenario.
MovieClip.prototype.random_position = function() {
x = (this._parent._width-this._width);
y = (this._parent._height-this._height);
this._x = (Math.floor(Math.random()*x));
this._y = (Math.floor(Math.random()*y));
trace(this._x);
};
podrias decirme por que? no lo entiendo…
uso flash 2004 MX.
gracias
Febrero 2nd, 2006 at 12:21 pm
Nada, arreglado! q friki soy… el code del prototype ha de estar por encima del FOR ya que los MC’s que ha de posicionar se atachean dinamicamente en el escenario…
gracias y disculpa las molestias.
Febrero 2nd, 2006 at 2:31 pm
Ninguna molestia Marck.