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

Ayuda a pausar cronometro

Estas en el tema de Ayuda a pausar cronometro en el foro de Flash y Actionscript en Foros del Web. Hola a todos, estoy en el desarrollo de un juego de rompecabezas basandome en un ejemplo que vi de otro sitio. Ya tengo el funcionamiento ...
  #1 (permalink)  
Antiguo 03/11/2009, 13:57
Avatar de Larc  
Fecha de Ingreso: octubre-2003
Ubicación: Mexico
Mensajes: 259
Antigüedad: 20 años, 5 meses
Puntos: 0
Ayuda a pausar cronometro

Hola a todos, estoy en el desarrollo de un juego de rompecabezas basandome en un ejemplo que vi de otro sitio.

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:
if ((cnt==0) && (_root.timing)){
		_root.timing = false;
		_root.paused = true;
}
Y no pasa nada , alguien me puede dar una ayudita?
__________________
Quien parte de las sombras y se levanta como un muerto brillando como una estrella sobre èl (towlen), entre la oscuridad congelante y la luz.
LÄRÇ :serio:
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




La zona horaria es GMT -6. Ahora son las 23:51.