Comunidad de diseño web y desarrollo en internet online

Menu con efecto de easing en Flash

Citar            
MensajeEscrito el 23 May 2005 05:32 pm
Tras mirar la programación de este tutorial:

http://www.cristalab.com/tutoriales/11/menu_con_efecto_de_easing_en_flash

quisiera preguntar si el archivo se queda calculando la posición del clip para siempre. Es decir, si el clip llega hasta su destino ¿no sería mejor detener el cálculo para ahorrar recursos del ordenador?

En caso afirmativo ¿cuál sería la mejor manera de hacerlo?

Lo que se me ocurre a mí parece bastante complicado: hacer unas comprobaciones, con "if" y varios "else" encadenados, de la posición del clip. pero me saldría un código muy largo ¿hay otra forma más sencilla?

Por aitor

3 de clabLevel



 

safari
Citar            
MensajeEscrito el 23 May 2005 06:22 pm
Pues la verdad, no creo que valga la pena perder el tiempo modificando este código, ya que está pensado para que se pueda hacer sin sufrir mucho dolor de cabeza con las mates. De todas maneras, como se está moviendo siempre hacia un lado o otro nunca alcanza ninguna posición final, ya que la única manera de que se pare, que por cierto ya está implementada, es cuando esta desde el centro 30 a la izq o 30 a la der. entonces se paran de mover todos los botones.

Por Sisco

BOFH

3700 de clabLevel

12 tutoriales
4 articulos

Genero:Masculino   Bastard Operators From Hell

Catalunya

firefox
Citar            
MensajeEscrito el 23 May 2005 07:12 pm
Perdona, no veo por ningún lado que esté implementada la detención. Si tienes la amabilidad de indicarme dónde...

Por otro lado yo estoy adaptando el código a mis necesidades, ligeramente distintas de las del ejemplo. Necesito que el script se detenga cuando el clip haya llegado a su destino.

Lo que se me ocurre, como decía, es hacer una comprobación del tipo:

si
(posición del clip)-(destino)<1
y
(posición del clip)-(destino)>-1 (se han de cumplir las dos)

detener el script.

Algo así. No sé si hay una forma más elegante.
Saludos.

Por aitor

3 de clabLevel



 

safari
Citar            
MensajeEscrito el 23 May 2005 07:31 pm
if (xposMouse<(xMitadEscena)-30) {
this.rojo_mc._x -= factor;

si esta condición se cumple: acciones, si no: se para, es decir no se aplica la variable "factor"

de todas formas, tu lo que quieres es que el menú aparezca de algún lado y se pare en algún otro lado utilizando la posición del mouse como referencia? la verdad no lo acabo de entender, explícate hombre!

^^

Por Sisco

BOFH

3700 de clabLevel

12 tutoriales
4 articulos

Genero:Masculino   Bastard Operators From Hell

Catalunya

firefox
Citar            
MensajeEscrito el 23 May 2005 10:58 pm
El asunto es bastante sencillo y no me he explicado bien, lo siento. Si coges el fla y donde pone:

onClipEvent(enterFrame){
_x+=(x-_x)*0.3
}

sustituyes por:

onClipEvent(enterFrame){
_x+=(x-_x)*0.3
trace(x-_x)
}

verás que nunca deja de calcular la posición del clip, aunque ya no sea necesario porque éste ha llegado (por lo menos visualmente) a su destino.

He implementado esta técnica en esta web:

http://www.madridabierto.com/multianual/esp/

para elegir el año de la convocatoria. como ya tengo muchos cálculos ejecutándose quisiera detener el cálculo de posición cuando ya no sea necesario.

Por aitor

3 de clabLevel



 

safari
Citar            
MensajeEscrito el 24 May 2005 08:07 am
vale!
- pues si la condición se cumple:

if (_x >= posFinal) {
delete this.onEnterFrame;
};

dentro del onclipEvent.

:wink:

Por Sisco

BOFH

3700 de clabLevel

12 tutoriales
4 articulos

Genero:Masculino   Bastard Operators From Hell

Catalunya

firefox
Citar            
MensajeEscrito el 24 May 2005 09:38 am
Pues debería funcionar, pero por alguna razón no se borra el "onEnterFrame", aunque la condición se cumple (lo compruebo con "trace")

onClipEvent(enterFrame){
if (_x<x+5&&_x>x-5) {
trace("se cumple");
delete this.onEnterFrame;
}
_x+=(x-_x)*0.3;
trace(_x);

}

¿alguna idea?

Por aitor

3 de clabLevel



 

safari
Citar            
MensajeEscrito el 24 May 2005 11:20 am
Pues no se que decirte, quizas podrías usar otra forma de mover el objeto, por ejemplo:

Código :

var posFinalX:Number;
var factor:Number;
function mover() {
   this._x += (posFinalX-this._x)/factor;
   if (this._x>=posFinalX) {
      clearInterval(this.intervalID);
   }
   updateAfterEvent();
}
boton_btn.onRelease = function() {
   miClip.intervalID = setInterval(miClip, "interval", 1);
   factor = 180;
   posFinalX = 400;
   miClip.interval = mover;
};


Aquí hacemos uso de setInterval para mover el mc, y lo eliminamos cuando se cumple la condición que puedes ver.

- factor es un número que indica la velocidad del efecto "easing" o desaceleración, a número más elevado menos velocidad, teniendo en cuenta la distancia claro!
- posFinalX, es la posición final donde queremos llegar. puedes implementar la _y también si quieres.
-. como puedes ver con este script pasamos del onEnterFrame.

PD.: Perdona mis post anteriores, ya que me había confundido de tutorial, estaba refiriéndome a otro, por eso te decía que no entendía lo que querías hacer con ese código!!! 8)

- Disculpa mi confusión... Espero haberte ayudado igualmente! :wink:

Por Sisco

BOFH

3700 de clabLevel

12 tutoriales
4 articulos

Genero:Masculino   Bastard Operators From Hell

Catalunya

firefox
Citar            
MensajeEscrito el 24 May 2005 04:08 pm
Te agradezco mucho tu ayuda. Ha sido muy instructiva pese a las confusiones. Intentaré hacer algo de lo que dices a ver si me sale. Tu sintaxis sobrepasa mis conocimientos. Me la tengo que estudiar despacio.

Gracias de nuevo.
Aitor.

Por aitor

3 de clabLevel



 

safari

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.