Ver Mensaje Individual
  #25 (permalink)  
Antiguo 27/03/2008, 07:23
Avatar de Mahalo
Mahalo
 
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 20 años, 5 meses
Puntos: 12
Re: Ayuda con menu acordeon

El problema es que este programa se basa en un evento onEnterFrame continuo que contiene bucles. No es lo más indicado ni lo que yo haría, pero bueno...
Como alternativa te paso este otro ejemplo (basta cambiar todo el código anterior por éste):
Código:
stop();
import mx.transitions.Tween;
import mx.transitions.easing.*;
var _on:Boolean = false;
var timeTween:Number = 1;
var t1:Tween;
var t2:Tween;
var t3:Tween;
var t4:Tween;
var t5:Tween;
var t6:Tween;

for (var i:Number = 1; i<=6; i++) {
	var tmp:MovieClip = this["movie"+i];
	tmp.dest = i;
	tmp.onRelease = function() {
		_on = !_on;
		moveTweens(this.dest);
	}
}

function moveTweens(index:Number) {
	var main_tmp:MovieClip = this["movie"+index];
	if (_on) {
		this["t"+index] = new Tween(main_tmp,"_x",mx.transitions.easing.Regular.easeOut, main_tmp._x, 0, timeTween, true);
	} else {
		this["t"+index] = new Tween(main_tmp,"_x",mx.transitions.easing.Regular.easeOut, main_tmp._x, 75*(index-1), timeTween, true);
	}
	for (var i:Number = 1; i<=6; i++) {
		var tmp:MovieClip = this["movie"+i];
		if (i<index) {
			if (_on) {
				this["t"+i] = new Tween(tmp,"_x",mx.transitions.easing.Regular.easeOut, tmp._x, -75*(index-i), timeTween, true);
			} else {
				this["t"+i] = new Tween(tmp,"_x",mx.transitions.easing.Regular.easeOut, tmp._x, 75*(i-1), timeTween, true);
			}
		} else if (i>index) {
			if (_on) {
				this["t"+i] = new Tween(tmp,"_x",mx.transitions.easing.Regular.easeOut, tmp._x, 450+(75*(i-index)), timeTween, true);
			} else {
				this["t"+i] = new Tween(tmp,"_x",mx.transitions.easing.Regular.easeOut, tmp._x, 75*(i-1), timeTween, true);
			}
		}
	}
}
Es mucho más sencillo, emplea la clase Tween y no tiene un evento onEnterFrame funcionando continuamente y empleando recursos.
El problemilla: que todo el mc es botón. Pero es muy fácil de solucionar y es entrando en el modo de edición de cada mc (movie1, movie2,...,movie6), convertir la cabecera en símbolo (clip de película) y darle un nombre de instancia (que puede ser el mismo para todos (por ejemplo _btn).
Entonces localizas las líneas
Código:
for (var i:Number = 1; i<=6; i++) {
	var tmp:MovieClip = this["movie"+i];
	tmp.dest = i;
	tmp.onRelease = function() {
		_on = !_on;
		moveTweens(this.dest);
	}
}
Y las sustituyes por:
Código:
for (var i:Number = 1; i<=6; i++) {
	var tmp:MovieClip = this["movie"+i];
	tmp._btn.dest = i;
	tmp._btn.onRelease = function() {
		_on = !_on;
		moveTweens(this.dest);
	}
}
Si decides probarlo, hazte una copia de seguridad del tuyo, por si no te gusta. Y a cualquier pega, puedo pasarte el fla.
Saludos!
__________________
Los ignorantes se empeñan en enseñar. Los sabios en aprender.
SourceForge