Flash funcion

VoLRaTh

Buenas, em gustaría saber si existe alguna funcion para controlar si el raton esta dentro o fuera del escenario o alguna manera de poder hacerlo.

IS4kO

Si el ratón está fuera del swf, este no lo podrá "adivinar".

Pero siempre que esté dentro, puedes controlar su posición con _xmouse y _ymouse

VoLRaTh

Yap, el problema es que tengo que controlar una mascara que cuando el raton este encima de la pelicula, se active o sea visible y cuando el raton este fuera se desactive la mascara. Lo que he hecho es dejar una zona muerta, estilo un marco, de tal manera que cuando el raton "pise esa zona se desactive, lo unico que es poco eficaz, puesto que es en el evento onEnterFrame y algunas veces no le da tiempo a pillar la posicion. Alguna sugerencia mas?

PD: Las variables de la posicion del mouse toman algun valor en concreto cuandoe stan fuera?

l31m

algo rapido y sencillo.

Crea un botón gigante el cual solo tenga la "Zona Activa" tan grande como el escenario.
Luego con el evento on(rollOver) podras detectar si esta en el escenario.

IS4kO

Lo que dice #4 podría ser un buen trukillo.

Piensa que los valores de posicionamiento del mouse nunca podran exceder el tamaño de la escena. Pudiendo establecer los limites del mismo.

VoLRaTh

Ahora tengo un problema, el mc de la mascara lo he llamado mask, y en al boton del escenario le he peusto estos eventos:

on (rollOver) {
mask.alpha+=(+20);
if (mask.
alpha<=0) {
delete this.onEnterFrame;
}
}

on (rollOut) {
mask.alpha+=(-20);
if (mask.
alpha<=0) {
delete this.onEnterFrame;
}
}

La cuestion es que a la mascara, la quiero reducir al minimo el alpha si sale para que se haga invisible y si entra aumentarla al maximo (todo esto progresivamente) hasta que se vuelva a ver. El problema es que no me funcioan estos eventos, no se si es porque no estoy accediendo bien al mc de la máscara. Alguna sugerencia?

PD: Muchas gracias por las respuestas.

IS4kO

Creo que hay un poco de cacao en el codigo

1º Según tu código, cuando haces el rollOver lo unico que haces es darle a mask su _alpha más 20 y restarle lo mismo si haces el rollOut...

Es decir, si tu tienes en un principio mask._alpha=100; cuando hagas el rollOut el alpha de mask pasará a ser 80 directamente, sin ningun tipo de transición

2º Decrementar un valor no hace falta sumarle su negativo, te bastaría con mask._alpha-=20

3º Si lo que quieres es hacer una transición, y lo quieres hacer por código, tendrías que meter un bucle, para que el alpha se vaya cambiando lentamente, algo asi:

onRollOver = function()
{
for(var i=100; i>0; i--)
{
mask._alpha=i;
}

Pero esto no es óptimo, ya que la velocidad con la que el ordenador procesara dicho bucle hará que sea casi imperceptible. Dicho esto:

4º Para lo que quieres hacer, lo suyo es tener un movieClip o una capa con algun elemento, el cual sufra una interpolación que vaya de alpha 100 a 0 y viceversa, y lo actives cuando hagas el rollOut o el rollOver respectivamente

Suerte ;)

VoLRaTh

Lo de restar y eso si funciona porque lo heprobao y va desincrementando poco a poco pero claro, con el onEnterFrame(). Estoy ahroa trabajndo en ello, en cuanto termine ya postearé el resultado ;)

VoLRaTh

Necesito depurar esto, no entiendo aun lo del delete this.onEnterframe, la condicion del if. El problema que veo ahora es que el fondo.onEnterFrame = function() no me pilla lso Frames con los que no peudo hacer un alpha progresivo. Alguna sugerencia?

fondo.onRollOver = function(){
fondo.onEnterFrame = function() {

mask.alpha += 20;
if (mask.
alpha<=100) {
delete this.onEnterFrame;
}
}
};

fondo.onRollOut = function(){
fondo.onEnterFrame = function() {

mask.alpha -= 20;
if (mask.
alpha>=0) {
delete this.onEnterFrame;
}
}
};

IS4kO

Nose donde estas poniendo esos eventos... por lo que depurarlo es un poko compicado

Te repito, lo mas simple es tener un mc que haga el efecto de 0 a 100 y de 100 a 0 cuando hagas uno de los eventos o activas y listo...

VoLRaTh

Ya he conseguido que funcione, los eventos los ponia en una capa de acciones.

Lo que he hecho es en la imagen "boton" he peusto esto:

on(RollOver){
onEnterFrame = function() {

mask.alpha += 5;
if (mask.
alpha>=100) {
delete this.onEnterFrame;
}
}
}

on(RollOut){
onEnterFrame = function() {

mask.alpha -= 5;
if (mask.
alpha<=0) {
delete this.onEnterFrame;
}
}
}

Lo que no funcionaba cuando lo hice era el delete this.onEnterFrame.

Muchas gracias IS4k0 y l31m.

Usuarios habituales

  • VoLRaTh
  • IS4kO
  • l31m