Muchas veces necesitamos dividir una imagen en partes independientes para hacer diversos efectos. Este código efectúa una partición en trozos de cualquier imagen. Las "piezas" quedan almacenadas como un array llamado pz[] para poder moverse o usarse según convenga.
Está escrito como una función llamada puzzle a la que llamamos para dividir la imagen del siguiente modo:
Código :
puzzle("imagen", filas, columnas, false);Imagen es el nombre de vinculación desde la biblioteca, luego las filas y colunmas deseadas y por último si hacer cuadros o piezas de puzzle (true o false).
Simplemente la llamamos y ya está hecho completamente el puzzle!!
Las piezas del puzzle tienen cada una una forma de borde distinta que se genera aleatoriamente.
La profundidad y brillos de los bordes y el "imán" de posición se ajustan automáticamente dependiendo del tamaño de las piezas.
La partición en cuadraditos, tiras, etc es muy util para efectos de transiciones de imágenes tipo explotar, entrelazado, recombinación, etc. Pondré ejemplos posteriormente con estas y otras transiciones.
He añadido solamente el cambiador de nivel, un ajustador automático de posición y un detector de puzzle terminado o "todas en su sitio" en las funciones de drag. Las funciones de mezcla y dispersión no las incluyo porque son funciones aparte que dependen de la aplicación que demos al script.
Ejemplo:
Clickear en las piezas para moverlas y usar los botones para ver distintas formas y divisiones.
Código Puzzle
Código :
import flash.display.*;
import flash.geom.*;
import flash.filters.*;
puzzle("imagen", 4, 4, false); // tipo de llamada a la función
function puzzle(imagen, f, c, lin) {
for (hg=0; hg<4*tpz; hg++){pz[hg].removeMovieClip();} // borra puzzle anterior si existe.
a=new Array(1,12,0,.35,2,12,1,.15,3,2,4,.2,5,4,6,.5,7,6,8,.5,10,12,2,.15,9,8,10,.4,11,12,10,.15);
tpz = f*c;
c>f ? j=20/c : j=20/f;
bF = new BevelFilter(1,45,0xffffff,.5,0,.5,j,j,4,3,"inner",false);
img = BitmapData.loadBitmap(imagen);
w = img.width; h = img.height; m1 = w/(3*c); m2 = h/(3*f);
// creando matriz delados congruentes entre piezas contiguas
p = []; d = 0;
for (m=0; m<4*tpz; m+=4) {
p[m+7] = p[m+1] = d++;
if((d-1)%(2*c) == 2*(c-1)) {p[m+1]=p[(m+4)%(4*tpz) +3]=2*tpz-2};
p[m+4*c] = p[m+2] = d++;
if(d>2*(tpz-c) && d%2 == 0) {p[m+2]=p[(m+4*c)%(4*tpz)]=2*tpz-1};
}
for (g=0; g<2*tpz; g++) {
b[g] = [];
b[g][0] = new Point(m1, m2);
alea()<0 ? sig=-1 : sig=1; // las curvas de encaje para distinto lado aleatoriamente
if (g%2 == 0) { //puntos para lados horizontales
b[g][12] = new Point(m1, 4*m2);
b[g][4] = new Point(m1-m1*sig*.6, m2*(2+alea()));
b[g][6] = new Point(m1-m1*sig*.9, m2*(2.5+alea()));
b[g][8] = new Point(m1-m1*sig*.6, m2*(3+alea()));
} else { //puntos para lados verticales
b[g][12] = new Point(4*m1, m2);
b[g][4] = new Point(m1*(2+alea()), m2-m2*sig*.6);
b[g][6] = new Point(m1*(2.5+alea()), m2-m2*sig*.9);
b[g][8] = new Point(m1*(3+alea()), m2-m2*sig*.6);
}
for (r=0; r<29; r+=4){ //puntos centrales de curvas para H y V
b[g][a[r]] = Point.interpolate(b[g][a[r+1]],b[g][a[r+2]],a[r+3]+alea());
}
}
pz = [];
pt=[];
for (n=0; n<f*c; n++) {
pz[n] = createEmptyMovieClip("pz"+n, n+1);
tmp2 = new BitmapData(5*m1, 5*m2, true, 0);
pt[n] = new Point((n%c)*3*m1-m1, Math.floor(n/c)*3*m2-m2);
tmp2.copyPixels(img,new Rectangle(pt[n].x,pt[n].y,5*m1,5*m2),null);
//dibujando los 4 lados de cada pieza
for (z=0; z<4; z++) {
z == 2 ? sy=3*m2 : sy=0; z == 1 ? sx=3*m1 : sx=0;
g = p[4*n+z];
pz[n].beginBitmapFill(tmp2);
pz[n].moveTo(5*m1/2, 5*m2/2);
pz[n].lineTo(b[g][0].x+sx, b[g][0].y+sy);
if (g>(2*tpz-3) || lin){pz[n].lineTo(b[g][12].x+sx, b[g][12].y+sy);}
else {
pz[n].lineTo(b[g][1].x+sx, b[g][1].y+sy);
for (j=2; j<12; j+=2){
pz[n].curveTo(b[g][j].x+sx, b[g][j].y+sy,b[g][j+1].x+sx,b[g][j+1].y+sy);
}
pz[n].lineTo(b[g][12].x+sx, b[g][12].y+sy);
}
pz[n].lineTo(5*m1/2, 5*m2/2);
pz[n].endFill();
}
//doblando la asignacion para evitar fallos de ajuste por decimales.
pz[n]._x = pt[n].x; pt[n].x = pz[n]._x;
pz[n]._y = pt[n].y; pt[n].y = pz[n]._y;
pz[n].filters = [bF];
pz[n].v = n;
}
for (h=0; h<tpz; h++) {
pz[h].onPress = function() {
this.startDrag();
this.swapDepths(tpz+1);
}
pz[h].onRelease = function() {
this.stopDrag();
// iman de colocación si la pieza está cerca de su sitio.
cerca = new Point(this._x,this._y)
if (Point.distance(pt[this.v],cerca)< 4+(m1+m2)/15){
this._x = pt[this.v].x; this._y = pt[this.v].y;
}
//comprobador de puzzle completo o piezas que faltan por colocar
cnt=0;
for (tt=0; tt<tpz; tt++){
if((pz[tt]._y == pt[tt].y) && (pz[tt]._x == pt[tt].x)) {++cnt;}
cnt==tpz ? texto="completo" : texto="faltan: "+(tpz-cnt);
}
}
}
function alea() {return (.1-Math.random()/5);} // función de extración aleatoria en general.
}No son necesarias modificaciones pues todos los parámetros se autoajustan. Si acaso variar el radio mínimo de captación y la "potencia" del iman de colocación:
if (Point.distance(pt[this.v],cerca)< 4+(m1+m2)/15){
En los ejemplos de transiciones y juegos que usan esta función que ya iré posteando, les he incluido volumen y sombras.

lastima que no se puedan unir piezas fuera de su sitio y luego moverlas conjuntamente
Mi idea era poner el "motor" de fabricación de piezas y luego ponerle unas tropecientas mil funciones para usarlo.
Como digo en el tip:
En la aplicación específica para puzzle de formas SI tengo la función de agrupación exterior asi como botón de de fondo visionable, recomposición automática con movimiento, zoom, giro de piezas y ayuda focal, etc.
Además de que el puzzle completo pueda ser de cualquier forma (no solo un rectangulo). Pero esa es una aplicación entera y no un Tip de uso.
Por karkuxx el 24 de Febrero de 2007
sabes como me vino ??!!!
Genial Teseo
Gracias
Deberías pasarlo a una clase, definir datatypes, y optimizar cosas como:
Before
Código :
After
Código :
Este tipo de cosas, podrían leerse de un archivo de configuración.
Código :
Saludos
Por andsigil el 27 de Febrero de 2007
andsigil@hotmail.com
TENER UNA IMAGEN EN LA BIBLIOTECA (PNG, GIF, BMP, JPG..)
Poner la imagen en la biblioteca del FLA. y vincularla con el nombre "imagen" OJO : vincularla no es ponerla en el escenario. Colocar u MC, gráfico o botón en el Escenario y darle nombre de instancia es "instanciar", no es "vincular para attach".
Instrucciones para vincular una imagen que está en la biblioteca:
1) En la biblioteca pones una imagen llamada digamos "paisaje".
2) Pinchas con ratón derecho sobre su icono en la biblioteca.
3) Pinchas en vinculación en el menú que aparece.
4) En la ventana que sigue: Propiedades de vinculación marcas Exportar para ActionScript , marcará también Exportar en primer fotograma, déjalo marcado. En identificador pon imagen (ese es el nombre que buscará el script para cargarlo en attach). Deja la entrada de Clase AS2 en blanco. pulsa Aceptar. Si todo ha ido bien, en las columnas de la biblioteca verás: nombre, tipo, nº de usos, y en vinculación la palabra imagen.
COLOCAR EL CODIGO EN LAS ACCIONES DEL PRIMER FRAME DE LA LINEA DE TIEMPO PRINCIPAL
LLAMAR A LA FUNCION PUZZLE CON LOS PARAMETROS QUE DESEEMOS:
En el código hay una linea que hace la llamada:
puzzle("imagen", 4, 4, false); // tipo de llamada a la función
Cambiamos los parametros que deseemos de filas y columnas (4 y 4 en este ejemplo) y si deseamos cuadraditos( true) o piezas de puzzle (false). El primer parámetro "imagen" es el nombre que pusimos para la vinculación desde la biblioteca.
Por andsigil el 01 de Marzo de 2007
Voy a seguir tus instrucciones al pie de la letra a ver si esta vez tengo más suerte.
¡GRACIAS TESEO!
andsigil@hotmail.com
Por andsigil el 01 de Marzo de 2007
Sigo pensando que no te cuesta ningún trabajo colgar el fla.
Debo ser más torpe que un guardahabas...
Mi correo es
andsigil@hotmail.com
Por AYUDA!! el 02 de Marzo de 2007
Muchas gracias!
Por andsigil el 02 de Marzo de 2007
Creo que Teseo ha configurado el código para que sólo 'funcione'en Flash8 aunque yo he copiado, pegado el código y he seguido sus instrucciones y tampoco funciona. Me encantaría poder ayudarte porque a mí me interesa muchísimo este código y espero que Teseo se apiade de nosotros y nos cuelgue el fla o nos diga qué es lo que hacemos mal. Yo estoy dispuesto a que si Teseo me proporciona su correo electrónico mandarle el fla con su código para que él vea que no funciona y me diga qué es lo que estoy haciendo mal.
andsigil@hotmail.com
Por andsigil el 03 de Marzo de 2007
Ya sé que el código 'funciona' SÓLO en Flash 8. Lo que yo comento es que a mi ni siquiera me funciona en Flash8. Ya lo he comentado en el foro y estoy a la espectativa de que alguien me explique qué es lo que hago mal para que tampoco me funcione en Flash8. Acepto mis limitaciones y acepto que soy un torpe. Estaba intentando ayudar al mensaje puesto por AYUDA!!_blog. De todas formas, gracias por tus comentarios, Freddie.
Un saludo.
andsigil@hotmail.com
Pero enseguida pongo un botón para el FLA en el ejemplo de modo que lo puedan bajar todos los que tengan algún problema.
Por josedelaranda el 07 de Marzo de 2007
gracias
Por Confundidad el 15 de Marzo de 2007
Gracias
Por kingKaiser el 22 de Marzo de 2007
Por Moisés el 22 de Marzo de 2007
Tengo unos test psicométricos en el cual uno consiste en ensamblar piezas pequeñas para armar una pieza grande, apuesto que alguna vez lo han hecho, bueno el punto es que hay muchisimas formas de ensamblar la figura y no se quiere limitar a el usuario a solo armarla de la forma que a nosotros se nos ocurre, entonces lo único que necesito es como saber si una pieza esta encima de otra, pero las piezas son amorfas y hasta ahorita solo he encontrado detector de colisiones que toman la pieza como si fuese un cuadrado o un rectángulo, alguien me podría ayudar con eso, necesito algo asi como un detector de colisiones para figuras amorfas.
gracias
Sobre colisiones entre formas mira este post:
http://www.cristalab.com/foros/viewtopic.php?t=28259
Por jose maria el 26 de Mayo de 2007
Por dark el 04 de Junio de 2007
a=new Array(1,12,0,.35,2,12,1,.15,3,2,4,.2,5,4,6,.5,7,6,8,.5,10,12,2,.15,9,8,10,.4,11,12,10,.15);
Por dark el 04 de Junio de 2007
Veamos el código que fabrica las curvas de cada lado del puzzle:
Código :
for (g=0; g<2*tpz; g++) { b[g] = []; b[g][0] = new Point(m1, m2); alea()<0 ? sig=-1 : sig=1; // las curvas de encaje para distinto lado aleatoriamente if (g%2 == 0) { //puntos para lados horizontales b[g][12] = new Point(m1, 4*m2); b[g][4] = new Point(m1-m1*sig*.6, m2*(2+alea())); b[g][6] = new Point(m1-m1*sig*.9, m2*(2.5+alea())); b[g][8] = new Point(m1-m1*sig*.6, m2*(3+alea())); } else { //puntos para lados verticales b[g][12] = new Point(4*m1, m2); b[g][4] = new Point(m1*(2+alea()), m2-m2*sig*.6); b[g][6] = new Point(m1*(2.5+alea()), m2-m2*sig*.9); b[g][8] = new Point(m1*(3+alea()), m2-m2*sig*.6); } for (r=0; r<29; r+=4){ //puntos centrales de curvas para H y V b[g][a[r]] = Point.interpolate(b[g][a[r+1]],b[g][a[r+2]],a[r+3]+alea()); } }La curva a generar necesita 13 puntos (0 a 12) para poder dibujarse.
Primero tengo que determinar, a partir del punto 0, los puntos 12 (otro extremo del lado), 4 ,6 y 8 ("anchor" de cada curva). Hay dos grupos en el código según sea horizontal o vertical el lado.
Esos puntos saldrán aleatoriamente a un lado u otro de la recta 0-12 según el signo de la variable sig :
alea()<0 ? sig=-1 : sig=1;
Para que sea la curva continua, tienen que estar alineados en la misma recta cada grupo según el gráfico.
El array a[] se divide en grupos de 4
a=new Array(
1,12,0,.35,
2,12,1,.15,
3,2,4,.2,
5,4,6,.5,
7,6,8,.5,
10,12,2,.15,
9,8,10,.4,
11,12,10,.15);
y va generando los puntos restantes(1,2,3,5,7,10,9 y 11) por interpolación en la recta.
b[g][a[r]] = Point.interpolate(b[g][a[r+1]],b[g][a[r+2]],a[r+3]+alea());
Es decir:
Para obtener el punto 1 interpolo en la recta 12-0 en porcentaje .35 (+/- un alea de .1)
para el 2 recta 12-1 porcentaje .15 (+/- un alea de .1)
...y así continua el bucle con el resto del array.
Observa que tengo que determinar el punto 10 antes que el 9 pues para determinar el 9 necesito previamente el 10. Ese es el motivo de la alteración del orden de esos elementos en el array.
Los añadidos de aleatorio en el porcentaje de interpolación generan la variación en la forma de la curva.
Por Casv el 07 de Junio de 2007
Gracias.
Por Dark el 10 de Junio de 2007
Por Dark el 20 de Junio de 2007
Por Dark el 20 de Junio de 2007
La esquina de anclaje está correcta, ten en cuenta que necesita 5 módulos m1/m2 de ancho/alto para poder cubrir la "lenguetas" exteriores posibles.
Existen múltiples modos de efectuar un giro por cualquier punto distinto al de anclaje de un MC.
Usando localToGlobal , con trigonometria pura y dura, con la clase Matrix, etc...
Para el caso que nos ocupa ( el puzzle) las rotaciones creo que deben estar restringidas a giros de 90 grados por motivos harto evidentes. Pongo entonces una función adaptada al caso y muy simple que requiere una implementación sencilla. (un control de teclado, la función de rotar y una asignación inmediatamente después del startDrag().
Aparte de eso, en el código inicial del tip se deslizó un error entre el flash de ejemplo y dicho código.
FALTA UNA ASIGNACION DE ARRAY b=[] en esta linea:
Donde pone:
p = []; d = 0;
Debería poner:
p = []; d = 0; b = [];
También consignar que para ver el texto de piezas que faltan se necesita en el escenario un campo de texto dinámico con la variable (en propiedades) texto
Este es el código, con esa corrección efectuada y el giro añadido:
Código :
import flash.display.*; import flash.geom.*; import flash.filters.*; puzzle("imagen", 6, 6, false); // tipo de llamada a la función function puzzle(imagen, f, c, lin) { for (hg=0; hg<4*tpz; hg++){pz[hg].removeMovieClip();} // borra puzzle anterior si existe. a=new Array(1,12,0,.35,2,12,1,.15,3,2,4,.2,5,4,6,.5,7,6,8,.5,10,12,2,.15,9,8,10,.4,11,12,10,.15); tpz = f*c; c>f ? j=20/c : j=20/f; bF = new BevelFilter(1,45,0xffffff,.5,0,.5,j,j,4,3,"inner",false); img = BitmapData.loadBitmap(imagen); w = img.width; h = img.height; m1 = w/(3*c); m2 = h/(3*f); // creando matriz delados congruentes entre piezas contiguas p = []; d = 0; b = []; for (m=0; m<4*tpz; m+=4) { p[m+7] = p[m+1] = d++; if((d-1)%(2*c) == 2*(c-1)) {p[m+1]=p[(m+4)%(4*tpz) +3]=2*tpz-2}; p[m+4*c] = p[m+2] = d++; if(d>2*(tpz-c) && d%2 == 0) {p[m+2]=p[(m+4*c)%(4*tpz)]=2*tpz-1}; } for (g=0; g<2*tpz; g++) { b[g] = []; b[g][0] = new Point(m1, m2); alea()<0 ? sig=-1 : sig=1; // las curvas de encaje para distinto lado aleatoriamente if (g%2 == 0) { //puntos para lados horizontales b[g][12] = new Point(m1, 4*m2); b[g][4] = new Point(m1-m1*sig*.6, m2*(2+alea())); b[g][6] = new Point(m1-m1*sig*.9, m2*(2.5+alea())); b[g][8] = new Point(m1-m1*sig*.6, m2*(3+alea())); } else { //puntos para lados verticales b[g][12] = new Point(4*m1, m2); b[g][4] = new Point(m1*(2+alea()), m2-m2*sig*.6); b[g][6] = new Point(m1*(2.5+alea()), m2-m2*sig*.9); b[g][8] = new Point(m1*(3+alea()), m2-m2*sig*.6); } for (r=0; r<29; r+=4){ //puntos centrales de curvas para H y V b[g][a[r]] = Point.interpolate(b[g][a[r+1]],b[g][a[r+2]],a[r+3]+alea()); } } pz = []; pt=[]; for (n=0; n<f*c; n++) { pz[n] = createEmptyMovieClip("pz"+n, n+1); tmp2 = new BitmapData(5*m1, 5*m2, true, 0); pt[n] = new Point((n%c)*3*m1-m1, Math.floor(n/c)*3*m2-m2); tmp2.copyPixels(img,new Rectangle(pt[n].x,pt[n].y,5*m1,5*m2),null); //se.attachBitmap(tmp2,0); //dibujando los 4 lados de cada pieza for (z=0; z<4; z++) { z == 2 ? sy=3*m2 : sy=0; z == 1 ? sx=3*m1 : sx=0; g = p[4*n+z]; pz[n].beginBitmapFill(tmp2); pz[n].moveTo(5*m1/2, 5*m2/2); pz[n].lineTo(b[g][0].x+sx, b[g][0].y+sy); if (g>(2*tpz-3) || lin){pz[n].lineTo(b[g][12].x+sx, b[g][12].y+sy);} else { pz[n].lineTo(b[g][1].x+sx, b[g][1].y+sy); for (j=2; j<12; j+=2){ pz[n].curveTo(b[g][j].x+sx, b[g][j].y+sy,b[g][j+1].x+sx,b[g][j+1].y+sy); } pz[n].lineTo(b[g][12].x+sx, b[g][12].y+sy); } pz[n].lineTo(5*m1/2, 5*m2/2); pz[n].endFill(); } //doblando la asignacion para evitar fallos de ajuste por decimales. pz[n]._x = pt[n].x; pt[n].x = pz[n]._x; pz[n]._y = pt[n].y; pt[n].y = pz[n]._y; pz[n].filters = [bF]; pz[n].v = n; } for (h=0; h<tpz; h++) { pz[h].onPress = function() { this.startDrag(); this.swapDepths(tpz+1); clip = this; } pz[h].onRelease = function() { this.stopDrag(); // iman de colocación si la pieza está cerca de su sitio. cerca = new Point(this._x,this._y) if (Point.distance(pt[this.v],cerca)< 4+(m1+m2)/15){ this._x = pt[this.v].x; this._y = pt[this.v].y; } //comprobador de puzzle completo o piezas que faltan por colocar cnt=0; for (tt=0; tt<tpz; tt++){ if((pz[tt]._y == pt[tt].y) && (pz[tt]._x == pt[tt].x) && !pt[tt]._rotation) {++cnt;} cnt==tpz ? texto="completo" : texto="faltan: "+(tpz-cnt); } } } function alea() {return (.1-Math.random()/5);} // función de extración aleatoria en general. // giro de las piezas al pulsar la barra espacio teclado=new Object(); teclado.onKeyDown = function(){Key.getCode()==Key.SPACE ? rotar90() : null;} Key.addListener(teclado); function rotar90(){ clip._x -= clip.a2; clip._y -= clip.b2; rt = clip._rotation += 90; clip.a2 = 2.5*(m1*(rt!=0)+m1*(rt==180)+m2*(rt==90)-m2*(rt==270)); clip.b2 = 2.5*(m2*(rt!=0)+m2*(rt==180)-m1*(rt==90)+m1*(rt==270)); clip._x += clip.a2; clip._y += clip.b2 } }El giro se efectúa al pulsar la barra espaciadora.
Por Emilio el 11 de Julio de 2007
¿Has quitado el funcionamiento del botón para descargar el fla?
En el ejemplo, el botón para bajar el FLA funciona.
En el código publicado no incluyo la instrucción para ese botón.
Por Emilio el 16 de Julio de 2007
Por el 31 de Octubre de 2007
Para mezclar las piezas (contenidas en el array pz[] ) y deshacer el puzzle podemos usar una simple función que lo haga:
Para rotar al mezclar, hay que tener incluida la función rotar90() cuyo código anda por ahí en este post.
Código :
// mezcla las piezas en el espacio definido por el cuadrado // con esquina superior-izquierda(a,b) e inferior-derecha (c,d). //Si se pasa un quinto valor(e) cualquiera, gira, además, la pieza aleatoriamente 0,90,180 o 270º function mezclar(a,b,c,d,e){ len=pz.length; for(var j=0;j<len;j++){ pz[j]._x=a+(c-a)*Math.random(); pz[j]._y=b+(d-b)*Math.random(); if(e){ as=Math.floor(4*Math.random()); for(var k=0;k<as;k++){ rotar90(pz[j]); } } } }Por Dark el 09 de Noviembre de 2007
Por kal el 12 de Diciembre de 2007
Por joshuavw el 08 de Abril de 2008
Por Movie_clip el 14 de Abril de 2008
( antes les nombro como en el ejemplo..."mfilas" etc.) pero no funcionan en la vista previa.No se mucho de Flash , por eso díganme paso a paso como debo proceder para hacer símbolos....( no me sale en la biblioteca los " shape" y no se como se hace, si me sale los símbolos y las iamgenes) .
Hasta ahora solo puedo crear el puzzle con una sola imagen.
Gracias.
Por Movie_clip el 14 de Abril de 2008
Por Marc el 18 de Abril de 2008
Desde ya muchas gracias!!!
Por Levis el 12 de Mayo de 2008
Por julio el 03 de Julio de 2008
:)saludos
Por XAvi el 03 de Septiembre de 2008
Gracias!!
Si añades al código la función mezclar que puse un poco más arriba de este post y la llamas al comienzo, el puzzle aparecerá desordenado. O también puedes poner un botón para mezclar que llame a esa función.
Por manuel el 16 de Septiembre de 2008
Bajar FLA
Teseo :
elchininet :
Teseo++;
No puedo moverlo rápido sin salirme del marco, necesito un área más grande, parece que no tengo mucho control del mouse.
Pues claro, un excelente aporte. Mis respetos
Eso se produce cuando pinchas la pieza muy cerca de su borde y mueves rápido el ratón para "salir" de la pieza. La pieza puede quedar enganchada por que no lo da tiempo al onRelease a ser detectado en un intervalo de frames.
Tiene simple solución:
Cambiar la linea:
Código :
pz[h].onRelease = function() {por esta otra:
Código :
pz[h].onRelease = pz[h].onReleaseOutside = pz[h].onRollOut = function() {Y el problema desaparece.
Por yajaira el 29 de Septiembre de 2008
Por dmarcasv el 01 de Octubre de 2008
Por Sacrom el 07 de Octubre de 2008
he copiado la función del botón y tampoco me lo desordena. Solo funciona si le doy al botón, pero lo que quiero es que salga desordenado sin presionar ningún botón. He intentado crear un primer frame con un botón "empezar" o algo parecido y que este llame al segundo frame con la función de mezcla pero no me funciona.
Que puedo hacer? o donde no pongo bien el código?
Saludos.
Por mdweopfubv el 07 de Octubre de 2008
Por Cesar Augusto el 24 de Octubre de 2008
Para deshablilitar:
Código :
Para eliminar:
Código :
Por Arturo el 05 de Noviembre de 2008
esta excelente el codigo
Una pregunta como puedo reemplazar las imagenes por otras?
Por el Chabelo el 08 de Diciembre de 2008
Por el Chabelo el 08 de Diciembre de 2008
Por Luci el 04 de Marzo de 2009
Me ha parecido fabuloso tu puzzle
Lo utilicé, seguí los pasos de todas las dudas y me ha funcionado muy bien. Gracias por compartirlo con novatos como nosotros.
L.
Por patricia el 05 de Abril de 2009
Por alejandro mora el 12 de Abril de 2009
Por Martin el 30 de Abril de 2009
Por viley el 13 de Junio de 2009
Por ekapam el 17 de Junio de 2009
hahaha, muchas gracias por el tuto.. y excelente manejo de Arrays..
saludos..
Por manolo el 19 de Junio de 2009
Por manolo el 19 de Junio de 2009
Por djordonezc el 30 de Julio de 2009
Puedes poner el link en donde la tienes.
2. Como se cambian los valores para ajustar la potencia del iman? Hay que aumentar/reducir el 4 y el 15?
Gracias!
Por Eidoscom el 04 de Agosto de 2009
Por leticia el 12 de Septiembre de 2009
tiene un puzzle solo
Por denisneuf el 06 de Octubre de 2009
Gracias Teseo,
Dani.
Por Diana el 23 de Octubre de 2009
Por Larc el 28 de Octubre de 2009
Tambien revise el que tienes completo en massjuegos.com y esta increible
Lo que no he podido hacer es la union de piezas, digamos que se puedan mover juntas cuando ya las coloque en su posicion.
sabras como se hace eso?
Por yess! el 06 de Noviembre de 2009
Por yo el 22 de Noviembre de 2009
Por Miss worried!!!! el 28 de Enero de 2010
Por joba el 10 de Febrero de 2010
gracias
Por Daniella el 23 de Febrero de 2010
Gracias.
gracias teseo, sos lo mas!
Por Andres el 05 de Marzo de 2010
Tengo un escenario e imagenes diversas de artefactos y lo que quiero hacer arrastrar cualquier imagen al escenario y que se quede ahi e ir agregando mas imagenes si que se pongan encima.
Gracias
mi correo andres_af_4@hotmail.com
Por kopersky el 05 de Marzo de 2010
Por xsc el 12 de Abril de 2010
Por marco el 05 de Agosto de 2010
Por wilherc el 14 de Agosto de 2010
Por Paola el 24 de Septiembre de 2010
Saludos
Por arnux el 22 de Octubre de 2010
chessjjz@yahoo.es
me llamo demian y me gustaria que si por
fabor me pudieras explicar como hago un
cuenta vocales en flash, si mira en el esenario tengo un cuadro de introduccion de texto donde colocando un palabra abajo del cuadro de introduccion de texto me debe mostrar el numero de vocales que hay
por ejemplo pongo la palabra hola
y abajo me dice:
a= 1
e=0
i=0
o=1
u=0
por fabor me puedes decir como hago eso en flash
GRACIAS
y el rompecabezas esta muy genial
me encango
Felicidades por eso.
Por leo el 18 de Noviembre de 2010
dime tendras un ejercicio para pintar figuras en tiempo de ejecucion mi correo
es nicro_62@hotmail.com
Por Manuel el 24 de Noviembre de 2010
Salu2 y gracias.
vivemexico_com@hotmail.com
Por uriel2707 el 07 de Diciembre de 2010
Por ozfilth el 08 de Febrero de 2011
Por FLeezy el 10 de Febrero de 2011
Ah y si funciona en CS4?
Muchas gracias de antemano a quien pueda ayudarme.
Por Gabriel Isaza S. el 12 de Febrero de 2011
Ofrezco disculpas por mi ignorancia, pero soy novato, y lo simple y obvio para el profesor, es muchas veces una gran dificultad para el aprendiz.
Quisiera aprenderte más. ¡Adelante!. Recuerda que al árbol que produce frutos, sólo le tiran piedras.
A quienes me puedan ayudar, este es mi correo
gabrielisazasepulveda@gmail.com
God bless you, teseo
Por Sr Murillo el 24 de Febrero de 2011
Muy bueno esto! pero tengo una inquietud, en el segundo FLA que montaste se desordenan, pero al momento de armarlas. no veo que funcione el "iman" o el encuadre.. osea se me arma donde sea que empieze y no me queda como debe.
Por Eliana el 01 de Septiembre de 2011
elyrial_1988@hotmail.com
muchisimas gracias!!! es para un trabajo de la facultad que deberia entregar en unos dias, gracias!!!
Por Mark FL el 03 de Octubre de 2011
Por el 10 de Octubre de 2011
Por Carlos B de Costa Ri el 02 de Noviembre de 2011
Por yefranjo77 el 18 de Noviembre de 2011
Hola teseo, esta muy bueno este post, mi pregunta es como puedo hacer para agregar más imagenes ya que el mismo solo tiene dos "imagen" "imagen1":
quize aplicar esto:
Código :
nimagen.onPress = function(){ imagen == "imagen" ? imagen = "imagen2" :imagen = "imagen1" :imagen = "imagen"; cimg=1; puzzle(imagen, f, c, tipo); }pero me genera este error
Código :
y por ultimo ¿¿como puedo insertar una imagen externa??
Por miguel angel el 09 de Enero de 2012
descargar FLA
ROTACION: por doble click en la pieza. Opcion selecionable de inicio.
RUEDA DEL RATON: Zoom +/- con foco en el puntero del ratón
FLECHAS DE BORDES Y ESQUINAS: Scrolls de 2 velocidades en la direccion deseada.
VENTANA DE SELECCION DE PIEZAS: Se pueden coger varias piezas marcando un cuadro en el escenario.
CENTRADO PARA VER TODAS LAS PIEZAS
CENTRADO PARA VER LA IMAGEN
BLUR AUTOMATICO PARA EL ZOOM
PAN MOVIMIENTO COMPLETO: desplazamiento de toda la pagina en cualquier escala.
CLICK MAGNETICO PARA JUNTAR PIEZAS CONTIGUAS
GRUPOS DE PIEZAS: Se pueden crear gupos de piezas contiguas para moverlas juntas.
SONIDOS: de giro, colocación etc..
VISOR DE AYUDA DE LA IMAGEN FINAL.
SELECION DE FILAS Y COLUMNAS.
MEZCLA ALEATORIA CON O SIN ROTACION.
FORMA ALEATORIA DE LAS PIEZAS.
TOTALMENTE REESCALABLE. LIQUIDA.
CONTROL DEL TIEMPO DE JUEGO.
CONTADOR DE PIEZAS CORRECTAMENTE COLOCADAS Y DETECCION DE TERMINADO.
TIPS DE AYUDA EN CADA BOTON DE CONTROL.
CARGA INTERNA Y EXTERNA DE IMAGENES PARA EL PUZZLE
SAVE/LOAD JUEGO: El usuario puede guardar un juego sin terminar y continuarlo al volver a abrir la pagina.
Los paramentros son salvados e modo local a traves de un pequeño sharedObjects pues la imagen es cargada desde el servidor.
Por yefranjo77 el 14 de Enero de 2012
Lamento decirte que el fla que me mandaste no corresponte a la version que tengo ya que uso flash 8 AS2. en cambio el post que hiciste del puzzle si es compatible con mi version de flash
yefranjo77 :
Hora de renovarte o abandonar la profesión.
Por jorge el 17 de Enero de 2012
Por yefranjo77 el 29 de Enero de 2012
lo se, lo se, estoy trabajando en eso, ya que aqui en mi pais un buen computador es algo costoso, y para poder acualizarme debo desechar mi computador y comprame uno nuevo donde flash CS5 o la version mas actualizada trabaje tranquilamente....estoyyy en eso
Por gio6411 el 15 de Marzo de 2012
Por Vani :D el 11 de Mayo de 2012