Ya tengo el funcionamiento de casi todo lo que necesito que haga, pero estoy congelado en poner un codigo que ya tengo que es el que pausa el cronometro en mi codigo del puzzle.
Este es mi codigo completo:
Código:
import flash.display.*; import flash.geom.*; import flash.filters.*; import mx.transitions.easing.*; import mx.transitions.Tween; rd = Math.random; tipo = false; imagen = "imagen"; puzzle("imagen", 2, 2, false); _root.contador_txt = "00:00:00"; function puzzle(imagen, f, c, lin) { // creando un contenedor para todas las piezas: puzz = this.createEmptyMovieClip("puzz", this.getNextHighestDepth()); for (hg=0; hg<4*tpz; hg++){pz[hg].removeMovieClip();} 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); if(!cimg){b = []}//solo en demo. texto="completo"; // solo en demo. // 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++) { if(!cimg){//solo en demo; b[g] = []; b[g][0] = new Point(m1, m2); alea()<0 ? sig=-1 : sig=1; 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 para H y V b[g][a[r]] = Point.interpolate(b[g][a[r+1]],b[g][a[r+2]],a[r+3]+alea()); } } }//fin cimg solo en demo; pz = []; pt=[]; for (n=0; n<f*c; n++) { // cargando piezas en el contenedor: pz[n] = puzz.createEmptyMovieClip("pz"+n, n+1); //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 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 = pz[h].onReleaseOutside = pz[h].onRollOut = function() { this.stopDrag(); // iman de colocación si está cerca la pieza. cerca = new Point(this._x,this._y) if (Point.distance(pt[this.v],cerca)< 10+(m1+m2)/35){ this._x = pt[this.v].x; this._y = pt[this.v].y; } //comprobador de puzzle completo: 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); } } cimg=0;//solo en demo }//fin puzzle function alea() {return (.1-rd()/5);} // para rotar pulsar la barra espaciadora. Rotará la última pieza selecionada. teclado=new Object(); teclado.onKeyDown = function(){Key.getCode()==Key.SPACE ? rotar90(clip) : null;} Key.addListener(teclado); function rotar90(clip){ 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 } // 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 mix(a, b, q, d, e){ len = pz.length; for (var j = 0; j<len; j++){ if (e) {as = Math.floor(4*rd());for (var k = 0; k<as; k++) {rotar90(pz[j]);}} pz[2]._x = 200; pz[j]._x = a+(q-a)*rd() ; pz[j]._y = b+(d-b)*rd(); pz[j].filters = [blF, bF]; } } //botón de mezcla: mezclar.onPress = function(){ mix(800,0,350,250, 0) new Tween (puzz,"_alpha", Strong.easeOut, 0, 100, 2, true); puzz._visible=true; img_ref._visible = false; cnt=0; cnt==tpz ? texto="chido" : texto="faltan: "+(tpz-cnt); if(!_root.timing) { if (_root.paused) { _root.startTime = getTimer() - _root.elapsedTime; } else { _root.startTime = getTimer(); } _root.paused = false; _root.timing = true; } }; } // Todo el puzzle se encuentra en el contenedor llamado: puzz // lo colocamos escalamos o rotamos como deseemos: puzz._x= 40; puzz._y= 50; //puzz._visible=false;
Tengo un boton llamado "mezclar" y al presionarlo mezcla las piezas e inicia el cronometro.
Código:
//botón de mezcla: mezclar.onPress = function(){ mix(800,0,350,250, 0) new Tween (puzz,"_alpha", Strong.easeOut, 0, 100, 2, true); puzz._visible=true; img_ref._visible = false; cnt=0; cnt==tpz ? texto="chido" : texto="faltan: "+(tpz-cnt); if(!_root.timing) { if (_root.paused) { _root.startTime = getTimer() - _root.elapsedTime; } else { _root.startTime = getTimer(); } _root.paused = false; _root.timing = true; } };
Y tambien otra parte donde comprueba que el rompecabezas esta completo:
Código:
//comprobador de puzzle completo: 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); } }
El codigo que necesito para parar ó pausar mi cronometro es este:
Código:
if(_root.timing) { _root.timing = false; _root.paused = true; }
Yo queria implementarlo en donde se comprueba que el puzzle esta completo, pero como esta dentro de un onRelease, onRollOut, onRollOusite... al mezclar las piezas e inmediatamente colocar el cursor encima de alguna pieza el cronometro se para y asi no me funciona.
Algo que habia pensado hacer era establecer otro codigo que me ayude a comprobar que el puzzle esta completo y que pare el cronometro algo como esto:
Código:
Y no pasa nada , alguien me puede dar una ayudita? if ((cnt==0) && (_root.timing)){ _root.timing = false; _root.paused = true; }