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

como hago este bucle???

Estas en el tema de como hago este bucle??? en el foro de Flash y Actionscript en Foros del Web. hola tengo un monton de botones a los cuales les he asignado acciones, epro con un bucle se ahorraria todo esto, como hago el bucle ...
  #1 (permalink)  
Antiguo 28/02/2006, 05:45
 
Fecha de Ingreso: diciembre-2003
Mensajes: 120
Antigüedad: 14 años
Puntos: 0
como hago este bucle???

hola tengo un monton de botones a los cuales les he asignado acciones, epro con un bucle se ahorraria todo esto, como hago el bucle a esto???

Código:
btn_1.onRollOver = function(){ this.gotoAndPlay("over"); }
btn_1.onRollOut = function(){ this.gotoAndPlay("out"); }
btn_1.onRelease = function(){ this.gotoAndPlay("on");}
btn_2.onRollOver = function(){ this.gotoAndPlay("over"); }
btn_2.onRollOut = function(){ this.gotoAndPlay("out"); }
btn_2.onRelease = function(){ this.gotoAndPlay("on"); }
btn_3.onRollOver = function(){ this.gotoAndPlay("over"); }
btn_3.onRollOut = function(){ this.gotoAndPlay("out"); }
btn_3.onRelease = function(){ this.gotoAndPlay("on"); }
btn_4.onRollOver = function(){ this.gotoAndPlay("over"); }
btn_4.onRollOut = function(){ this.gotoAndPlay("out"); }
btn_4.onRelease = function(){ this.gotoAndPlay("on"); }
btn_5.onRollOver = function(){ this.gotoAndPlay("over"); }
btn_5.onRollOut = function(){ this.gotoAndPlay("out"); }
btn_5.onRelease = function(){ this.gotoAndPlay("on"); }
btn_6.onRollOver = function(){ this.gotoAndPlay("over"); }
btn_6.onRollOut = function(){ this.gotoAndPlay("out"); }
btn_6.onRelease = function(){ this.gotoAndPlay("on"); }
muchas gracias!

PD: tambien me hace falta una variable global que dependiendo del boton que se pulse, los demas pasen a "out", vamos que solo se mantenga uno con el estado pulsado y comrpuebe que los demas no queden pulsados!!!

un saludo!!!
__________________
jorcri...
  #2 (permalink)  
Antiguo 28/02/2006, 06:04
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 13 años, 4 meses
Puntos: 12
Hola. Yo lo haría así:
Código:
for (i=1;i<6;i++){
   this["btn_"+i].onRollOver=function(){
      this.gotoAndPlay("over");
   }
}
Sin embargo no lo he probado porque ahora estoy en el curro, escaqueándome...
  #3 (permalink)  
Antiguo 28/02/2006, 06:11
 
Fecha de Ingreso: diciembre-2003
Mensajes: 120
Antigüedad: 14 años
Puntos: 0
si gracias, pero para hacer los 3 estados como lo hago, lo meto todo igual cambiando la function???

un saluduo!!!
__________________
jorcri...
  #4 (permalink)  
Antiguo 28/02/2006, 06:15
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 13 años, 4 meses
Puntos: 12
Sí, claro:
Código:
for (i=1;i<6;i++){
   this["btn_"+i].onRollOver=function(){
      this.gotoAndPlay("over");
   }
   this["btn_"+i].onRollOut=function(){
      this.gotoAndPlay("out");
   }
   this["btn_"+i].onRelease=function(){
      this.gotoAndPlay("on");
   }
}
Insisto, no lo he probado...
  #5 (permalink)  
Antiguo 28/02/2006, 07:58
 
Fecha de Ingreso: diciembre-2003
Mensajes: 120
Antigüedad: 14 años
Puntos: 0
funciona perfecto, y ademas como lo podria hacer para que si un boton ha sido pulsado se mantenga en la opcion "on" hasta que se pulse otro boton??

muchas gracias y un saludo!!!!
__________________
jorcri...
  #6 (permalink)  
Antiguo 28/02/2006, 08:22
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 13 años, 4 meses
Puntos: 12
Pues...
Así, a bote pronto... Podrías crear una función que pusiera todos los botones en "out". Dicha función la ejecutas antes del gotoAndPlay del onRelease.
A ver, que me he liado hasta yo...
Algo así:
Código:
function estado_out(){
   for (j=1;j<6;j++){
      this["boton_"+j].gotoAndPlay("out");
   }
}
Y en el código anterior, cambiar la función onRelease:
Código:
this["btn_"+i].onRelease=function(){
   estado_out();//aunque aquí no estoy seguro de si hay que declarar la ruta
   this.gotoAndPlay("on");
}
De este modo, cada vez que se pulse un botón, todos los demás irán al estado de "out" y el presionado se queda en "on" hasta que otro botón sea pulsado.
Lamento no poder probar estos códigos para asegurarme de que funcionan.
Saludos!!!
  #7 (permalink)  
Antiguo 28/02/2006, 08:51
 
Fecha de Ingreso: diciembre-2003
Mensajes: 120
Antigüedad: 14 años
Puntos: 0
hummm, no me funciona, a ver, los botones los tengo como clips (ya que hacen efectos al pulsar, on click y demas, con esta funcion en cada uno:
Cita:
on (release) {
tellTarget (_root) {
gotoAndStop (1);// cada uno con un fotograma diferente
}
}
y luego en un frame principal, el codigo anterior que me has dado:

Código:
for (i=0;i<20;i++){
   this["btn_"+i].onRollOver=function(){
      this.gotoAndPlay("over");
   }
   this["btn_"+i].onRollOut=function(){
      this.gotoAndPlay("out");
   }
   this["btn_"+i].onRelease=function(){
      this.gotoAndPlay("on");
   }
}
asi funciona todo bien, menos el que se quede pulsado un boton hasta que se pulsa otro, etc..., no se, creo que he puesto bien tu codigo, pero no me funciona!!!

muchisimas gracoas por la ayuda!!!!
__________________
jorcri...
  #8 (permalink)  
Antiguo 28/02/2006, 09:07
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 13 años, 4 meses
Puntos: 12
Vaya. Me he hecho un pequeño lío. ¿Los botones están cada uno en un clip de película? Yo creía que estaban directamente en el escenario.
De todos modos, te recomendaría pasar del tellTarget y declarar la ruta directamente con la acción:
Código:
on (release) {
   _root.gotoAndStop (1);// cada uno con un fotograma diferente
}
  #9 (permalink)  
Antiguo 28/02/2006, 09:22
 
Fecha de Ingreso: diciembre-2003
Mensajes: 120
Antigüedad: 14 años
Puntos: 0
Mil gracias Mahalo, pero no me explique bien, no los botones no estan en un clip, "son clips" y estan en el escenario principal, por eso uso el tellTarget ya que el comportamiento es de clip y no de boton!!! sorry quiza no me explique bien.

Bueno pues eso no entiendo para dejar el boton activado hasta que se pulse otro???

muchas gracias de nuevo y un saludo!!!
__________________
jorcri...
  #10 (permalink)  
Antiguo 28/02/2006, 09:32
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 13 años, 4 meses
Puntos: 12
Ah, vale. Ya comprendo mucho más. De todos modos puedes pasar del tellTarget, ¿no?
En fin, a lo que vamos...
Si te funciona es que todo el código del que hemos hablado está en el escenario principal, ¿no? Incluida la función de estado_out() que te sugerí. Y, además, eliminaría todas las funciones onRollOut dejándo así el código:
Código:
for (i=0;i<20;i++){
   this["btn_"+i].onRollOver=function(){
      this.gotoAndPlay("over");
   }
   this["btn_"+i].onRelease=function(){
      _root.estado_out();
      this.gotoAndPlay("on");
   }
}
Creo que debería funcionar...
Por cierto, ¿no debería ser gotoAndStop() o es que se reproduce una película?
Lamento hacerte perder tanto tiempo.
  #11 (permalink)  
Antiguo 28/02/2006, 09:48
 
Fecha de Ingreso: diciembre-2003
Mensajes: 120
Antigüedad: 14 años
Puntos: 0
pues casi pero no, cuando paso por encima de los botones el efecto over se queda en todos y si los voy pulsando se van quedando todos marcados no se desmarca el anterior, etc...

gracias de nuevo!!!
__________________
jorcri...
  #12 (permalink)  
Antiguo 28/02/2006, 10:24
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 13 años, 4 meses
Puntos: 12
Uf, tienes razón. Este código está muy verde. Y el tema me ha picado, je, je. Al llegar a casa le daré caña, que aquí en el curro estoy muy atado. Supongo que una solución está en declarar una variable que será el número del botón presionado y perfeccionar el código en base a eso. Estaré atento al foro por si logras la solución.
Saludos.
  #13 (permalink)  
Antiguo 28/02/2006, 10:50
 
Fecha de Ingreso: diciembre-2003
Mensajes: 120
Antigüedad: 14 años
Puntos: 0
ok, bueno estoy aqui con un compañero del curro haciendolo con AS2.0 y classes ya comento tambien cuando lo logre, graciasss!!!
__________________
jorcri...
  #14 (permalink)  
Antiguo 28/02/2006, 11:26
Avatar de -=ArgoN=-  
Fecha de Ingreso: octubre-2005
Ubicación: Barcelona, España
Mensajes: 843
Antigüedad: 12 años, 1 mes
Puntos: 1
Hola, tambien me pico un poco el tema, pero, no habria algun ejemplo grafico por ahi de lo que quieres hacer? alguna botonera de una web o algo... La misma botonera de www.macromedia.com

Saludos,

ArgoN
  #15 (permalink)  
Antiguo 28/02/2006, 12:01
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 13 años, 4 meses
Puntos: 12
Hola de nuevo. Ya llegué a casa y he hecho esto:
Código:
function estado_out(k) {
	for (j=1; j<5; j++) {
		this["btn_"+j].gotoAndStop("out");
	}
	this["btn_"+k].gotoAndStop("on");
}
presionado = 0;
for (i=1; i<5; i++) {
	attachMovie("boton", "btn_"+i, i);
	this["btn_"+i]._x = 100+100*i;
	this["btn_"+i]._y = 200;
	this["btn_"+i].presionado = i;
	this["btn_"+i].onRollOver = function() {
		this.gotoAndStop("over");
	};
	this["btn_"+i].onRollOut = function() {
		_root.estado_out(presionado);
	};
	this["btn_"+i].onRelease = function() {
		_root.presionado=this.presionado;
		_root.estado_out(presionado);
	};
}
Me funciona a la perfección.
He declarado una variable presionado en el escenario que es igual al número del botón presionado. Y una variable presioado en cada mc que es fija y equivale al número del mc en el que está contenido.
Saludos.
  #16 (permalink)  
Antiguo 28/02/2006, 12:34
 
Fecha de Ingreso: diciembre-2003
Mensajes: 120
Antigüedad: 14 años
Puntos: 0
cierto Mahalo perfecto, muchisimas gracias, mañana posteo el que estoy haciendo yo, y asi vemos diferencias entre uno y otro!!!

repito muchisimas gracias!!!!
__________________
jorcri...
  #17 (permalink)  
Antiguo 01/03/2006, 06:50
 
Fecha de Ingreso: diciembre-2003
Mensajes: 120
Antigüedad: 14 años
Puntos: 0
bueno ahi va, al final con un compañero del curro nos tiramos hacia las clases ya que el domina mucho por ahi y a POO:

asi se resolvio el asunto, se vinculo a un archivo .as y se programaron los botones desde alli y las funciones de ellos:

Código:
class lib.Historia
{
 // creamos variables para referirnos a ellas en vez de a los datos y sea mas facil de modificar.
	private var _path:MovieClip;
	private var _mcAnimaciones:MovieClip;
	private var _btnLast:MovieClip;
	// total botones
	private var _totalAnims:Number = 20;
	
	public function Historia(timeline:MovieClip)
	{
		_path = timeline;
		_mcAnimaciones = _path["Animaciones"];
		
		configBottom();
		configPages();
		
		btnRelease(_path["btn_0"]);
	}
	// se configuran otros botones para poder ir adelanta y atras!
	private function configPages():Void
	{
		var obj:Object = this;
		_mcAnimaciones["atras"].onRelease = function(){ obj.pageLeft(); }
		_mcAnimaciones["adelante"].onRelease = function(){ obj.pageRight(); }
	}
	// se controla que cuando llegue al fotograma 1 no intente ir mas hacia atras y lance un error
	private function pageLeft():Void
	{
		var id:Number = _btnLast.id;
		
		if(id>0)
		{
			id--;
			btnRelease(_path["btn_"+id]);
		}
	}
	// se controla hastq eu fotograma tiene que llegar
	private function pageRight():Void
	{
		var id:Number = _btnLast.id;
		
		if(id<_totalAnims-1)
		{
			id++;
			btnRelease(_path["btn_"+id]);
		}		
	}	
	// se configuran los estados de los botones!
	private function configBottom():Void
	{
		var obj:Object = this;
		
		for (var i:Number=0;i<_totalAnims;i++)
		{
			_path["btn_"+i].id = i;
			_path["btn_"+i].stateOver = function()
			{
				this.gotoAndPlay("over");
			}
			_path["btn_"+i].stateOut = function()
			{
				this.gotoAndPlay("out");
			}			
			_path["btn_"+i].stateOn = function()
			{
				this.gotoAndPlay("on");
			}	
			_path["btn_"+i].stateOff = function()
			{
				this.gotoAndPlay("off");
			}				
			
			_path["btn_"+i].onRollOver = function(){ obj.btnOver(this); }
			_path["btn_"+i].onRollOut = function(){ obj.btnOut(this); }
			_path["btn_"+i].onRelease = function(){ obj.btnRelease(this); }
		}		
	}
	
	private function btnOver(btn:MovieClip):Void
	{
		if(_btnLast!=btn) btn.stateOver();
	}	
	
	private function btnOut(btn:MovieClip):Void
	{
		if(_btnLast!=btn) btn.stateOut();
	}		
	
	private function btnRelease(btn:MovieClip):Void
	{
		if(_btnLast!=btn)
		{
			_btnLast.stateOff();
			_btnLast = btn;
			_btnLast.stateOn();
			
			_mcAnimaciones.gotoAndStop("anim_"+btn.id);
		}
	}
}

La verdad yo nunca habia programado de esta manera, me hago un lio, pero veo que es mucho mas ordenado y facil de reprogramar y reutilizar, asiq eu voy aprendiendo.

Mahalo darte las gracias por la ayuda!!

un saludo!!!
__________________
jorcri...
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 07:48.