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

b.onrollOver= function() {fondo._x=5;} ayuda por favor

Estas en el tema de b.onrollOver= function() {fondo._x=5;} ayuda por favor en el foro de Flash y Actionscript en Foros del Web. Hola de nuevo. Necesitaría ayuda con el código del titulo. b.onrollOver= function() { fondo._x += 5; } Pretendo mover el fondo, que es un MC ...
  #1 (permalink)  
Antiguo 28/09/2008, 23:21
 
Fecha de Ingreso: junio-2008
Mensajes: 68
Antigüedad: 16 años, 5 meses
Puntos: 0
b.onrollOver= function() {fondo._x=5;} ayuda por favor

Hola de nuevo. Necesitaría ayuda con el código del titulo.
b.onrollOver= function() {
fondo._x += 5;
}
Pretendo mover el fondo, que es un MC (fondo), con unos botones (b) que he puesto en los laterales del escenario y que serán transparentes. Quiero que cuando el usuario esté encima de esos botones, la imagen del fondo se vaya deslizando hacia un lado u otro y que sólo pare cuando se salga del área del botón. El problema con este código es que sólo se desliza una vez los 5px y hay que salir fuera del botón y volver a pasar por encima para volver a mover la imagen. He probado más códigos, pero ninguno acaba de funcionar. El que más se acerca es éste.

Además quisiera también el típico efecto de que cuando más hacia el borde del escenario vaya el usuario, más rápido se mueva la imagen y viceversa. Pero para conseguir esto creo que no debo trabajar con botones sino con trace mouse o algo así. También ahí tengo diferentes códigos, pero no me van.
Pero si esto último no puede ser, ya me conformo con lo primero.
Muchas gracias y saludos.

P.D. Explicádmelo lentito
  #2 (permalink)  
Antiguo 29/09/2008, 02:21
 
Fecha de Ingreso: marzo-2008
Mensajes: 100
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: b.onrollOver= function() {fondo._x=5;} ayuda por favor

Hola! Para que el desplazamiento sea continuo, has de introducir un onEnterFrame dentro de la funcion onRollOver. Sería algo asi:

Código actionscript:
Ver original
  1. b.onrollOver= function() {
  2.           onEnterFrame=function(){
  3.                     fondo._x += 5;
  4.            }
  5. }

Si posteriormente quieres, que al hacer rollOut, la animación se detenga, tendrás que añadir al código:

Código actionscript:
Ver original
  1. b.onrollOut= function() {
  2.           onEnterFrame=null;
  3. }

Un saludo!!
  #3 (permalink)  
Antiguo 29/09/2008, 04:16
 
Fecha de Ingreso: junio-2008
Mensajes: 68
Antigüedad: 16 años, 5 meses
Puntos: 0
De acuerdo Funcionaaaa!!!!!!!!!


Wow! Si funciona!! Genial; no sabes cuánto te lo agradezco. Ahora ya sólo me queda lo del efecto de acelerar y decelerar a medida que uno se aleje o acerque al borde lateral del escenario, pero creo que ésa es otra historia..... Y de momento ya tengo esto, que ya me sirve un montón.
Muchísimas gracias otra vez y saludos
  #4 (permalink)  
Antiguo 29/09/2008, 04:46
 
Fecha de Ingreso: junio-2008
Mensajes: 68
Antigüedad: 16 años, 5 meses
Puntos: 0
Pregunta Socorro, nuevo problema

¿Qué puedo hacer para que la imagen pare cuando llega a su tope, o sea a su final?
  #5 (permalink)  
Antiguo 29/09/2008, 06:44
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 17 años
Puntos: 51
Respuesta: b.onrollOver= function() {fondo._x=5;} ayuda por favor

Código PHP:
      b.onrollOver= function() {

                
onEnterFrame=function(){

                          
fondo._x += 5;
if (
fondo._x>400){

fondo._x=400
}
  
                 }
   
      } 
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft
  #6 (permalink)  
Antiguo 29/09/2008, 11:49
 
Fecha de Ingreso: junio-2008
Mensajes: 68
Antigüedad: 16 años, 5 meses
Puntos: 0
No me funciona,

es muy posible que sea YO que esté haciendo algo mal (en mi gran ignorancia de AS), aunque diría que he puesto el código exactamente tal y como tú me has indicado.
Ahora me hace algo raro, en cuanto me pongo en el botón con el que la imagen debería empezar a deslizarse, la imagen salta y luego ya no hay quien la mueva.....
De todas formas, muchas gracias por tu respuesta y a ver si se te ocurre qué es lo que puede estar yendo mal. Te lo agradecería a ti o a quien me pueda ayudar.
Saludos
P.D. Y recordad de seguir explicándome todo muuuuuy lentito
  #7 (permalink)  
Antiguo 29/09/2008, 12:13
 
Fecha de Ingreso: marzo-2008
Mensajes: 100
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: b.onrollOver= function() {fondo._x=5;} ayuda por favor

He probado el código del amigo Lynxcraft y a mi me funciona perfectamente.
Solo hay un pequeñito error (por si has copiado el código tal cual) y es que el primer onRollOver está escrito con minuscula (onrollOver) aunque si lo has puesto así, no debería funcionar la animación.

No se, si eso sube el archivo .fla para ver como lo tienes.

Un saludo!!
  #8 (permalink)  
Antiguo 29/09/2008, 14:35
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 17 años
Puntos: 51
Respuesta: b.onrollOver= function() {fondo._x=5;} ayuda por favor

hola nosena

perdona por no explicarte es que no soy bueno en eso lo mio es crear codigo y ya XDXD

bueno a ver te pongo el codigo de nuevo y intentare explicarme lo mejor posible XD


Código:
 b.onrollOver= function() {

                onEnterFrame=function(){
                          fondo._x += 5;
                         if (fondo._x>400){
                         fondo._x=400
                         } 
                 }   
      }
el numero 400 representa el limite por ejemplo si tu escenario es de 800 de ancho (_x) por 400 de alto (_Y)

si el fondo sobrepasa 400 ._x se queda parado

prueba a aumentar el valor por ejemplo pon esto y veras lo que le pasa
Código:
b.onrollOver= function() {

                onEnterFrame=function(){
                          fondo._x += 5;
                         if (fondo._x>1000){
                         fondo._x=400
                         } 
                 }
si el mc fondo._x llega a sobrepasar a 1000px fondo._x vuelve a 400px


si no me entiendes pedoname como ya digo no se me da muy bien explicar
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft
  #9 (permalink)  
Antiguo 30/09/2008, 00:54
 
Fecha de Ingreso: junio-2008
Mensajes: 68
Antigüedad: 16 años, 5 meses
Puntos: 0
ahora sí, pero....

Teníais razón, chicos, sí que funciona, aunque no es exactamente lo que quería. Me temo que la que se explicó mal soy yo. Lo que quería era que la imagen no salga del
escenario. Es decir que cuando el final lateral de la imagen que se desliza llega al escenario, que se pare el deslizamiento (lo sé, lo explico fatal). Quería que no se viese el final de la imagen ni por un lado ni por otro. El código que me habéis dado hace que cuando llegue a cierto punto, la imagen salte otra vez a su posición inicial. Pero creo que lo he conseguido. He cambiado la linea de código:

fondo._x=400
por :
onEnterFrame= Null

o sea:
b.onrollOver= function() {

onEnterFrame=function(){
fondo._x += 5;
if (fondo._x>600){
onEnterFrame=null
}
}
}

y parece que Sí, que se pare antes de verse el final de la imagen, que es lo que yo pretendía. Y lo he conseguido yo solita Bueno, solita, tras toda vuestra ayuda
¿Os parece que es correcto el código?
Bueno, aún tengo que hacer varias pruebas, a ver si de verdad todo funciona como quiero. También he conseguido hacer que a parte del fondo también se muevan otros objetos. Mis primeros pinitos en serio con AS...

Total, que os agradezco enormemente vuestra ayuda y -os aviso- no descarto solicitarla de nuevo, pues es posible que con este tema se me presenten nuevos problemas
Sólo espero no abusar de vosotros....
Gracias otra vez y saludos
  #10 (permalink)  
Antiguo 30/09/2008, 06:50
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 17 años
Puntos: 51
Respuesta: b.onrollOver= function() {fondo._x=5;} ayuda por favor

Me parece que lo has echo muy bien as aplicado la lógica al modificar el código pues ese es el fin de todas las explicaciones darte ejemplos base y que tu puedas aplicar y modificar a tu gusto XDXD sigue asi
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft
  #11 (permalink)  
Antiguo 01/10/2008, 00:25
 
Fecha de Ingreso: junio-2008
Mensajes: 68
Antigüedad: 16 años, 5 meses
Puntos: 0
Vuelvo a estar aquí.....

Hola otra vez. Me parece que no apliqué tanta lógica, Lynscraft
Como me temía, aquí estoy para abusar un poco más de ti o de quien se apiade de mí. A ver como explico el problema que tengo ahora:
Como dije en mi última respuesta, añadí el código que me diste, pero modificado a:

Código:
if(fondo._>600){
onEnterFrame=Null
}
y sí, funciona el aspecto de que la imagen para de moverse, detienéndose cuando llega a su tope aunque se siga encima del botón.
Todo funciona a la perfección, pero....
Si en el momento en que la imagen (fondo) se ha parado porque ha llegado a su final, nos apartamos con el mouse del botón y volvemos a ponernos encima vuelve a deslizarse algo la imagen. Pero no seguido. Sólo unos pixels y se para. Pero si vas poniéndote en el botón y apartándote varias veces seguidas consigues arrastrar la imagen hasta fuera del escenario y más. (no sé si me explico bien, es que es muy difícil de explicar.... )
A ver, que si no conseguimos arreglar este detalle, no pasa nada. No creo que nadie que entre en esa web (el día que la acabe), se entretenga arrastrando la imagencita....
De todas formas pego el código a ver si encuentras qué es lo que falla:
Código:
 b.onrollOver= function() {

                onEnterFrame=function(){
                          fondo._x += 5;
                         if (fondo._x>600){
                         onEnterFrame=Null
                         } 
                 }   
      }
	  b.onrollOut=function(){
	onEnterFrame=null;
}
b2.onrollOver=function(){
	onEnterFrame=function(){
		fondo._x-=5;
		if (fondo._x<100){
			onEnterFrame=null
		}
		
	}
}
b2.onrollOut=function(){
	onEnterFrame=null;
}
Muchísimas gracias una vez más. Y espero no estar abusando. Saludos
  #12 (permalink)  
Antiguo 01/10/2008, 06:56
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 17 años
Puntos: 51
Respuesta: b.onrollOver= function() {fondo._x=5;} ayuda por favor

bueno eso suele ser por utilizar onEnterFrame =null no digo que este mal sino que muchas veces es lo mas sencillo para programar pero eso crea conflictos si no estan bien colocadas XDXD aunque en teoría como lo tienes no tendría que darte problemas bueno ahora no me queda mucho tiempo cuando regrese por la noche te te hago una serie de ejercicios que crean el mismo efecto y te explico las diferencias del uno y del otro así te servirá para adentrarte mas a la programación XXDXD si tu quieres claro !!!
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft

Última edición por Lynxcraft; 01/10/2008 a las 07:05
  #13 (permalink)  
Antiguo 01/10/2008, 08:05
 
Fecha de Ingreso: junio-2008
Mensajes: 68
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: b.onrollOver= function() {fondo._x=5;} ayuda por favor

Eres un sol!!!!!!
Claro que me interesa, aunque me sabe hasta mal que te tomes tantas molestias.
Muchas gracias por tus esfuerzos, tu interés y tu tiempo.
Yo seguramente ya no podré conectarme hasta mañana x la mañana.
  #14 (permalink)  
Antiguo 01/10/2008, 17:35
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 17 años
Puntos: 51
Respuesta: b.onrollOver= function() {fondo._x=5;} ayuda por favor

jeje molestia ninguna de todos modos esto también me ayuda para aprender he ir practicando, lo primero descargarte este archivo en el cual iremos trabajando


archivo
Código PHP:
b.onrollOver= function() {

                
onEnterFrame=function(){
                          
fondo._x += 5;
                         if (
fondo._x>600){
                         
onEnterFrame=Null
                         
}
                 }  
      }
      
b.onrollOut=function(){
    
onEnterFrame=null;
}
b2.onrollOver=function(){
    
onEnterFrame=function(){
        
fondo._x-=5;
        if (
fondo._x<100){
            
onEnterFrame=null
        
}
        
    }
}
b2.onrollOut=function(){
    
onEnterFrame=null;

primero hablaremos de tu función Xd al darle barias veces al boton este sobrepasa el limite, la razón en la siguiente

cuando inicias la función onEnterFrame = function () { lo primero que le ordenas es que mueva el fondo 5x fondo._x += 5; una ves que lo ha movido le pides que haga una condición if(fondo._x>600) { luego anulas el enter frame onEnterFrame = Null;
}

bueno si ases esto tienes que tener en cuenta el orden en que va cada evento dentro de una función si le ordenas primero que se desplace y luego le pides que si as sobrepasado el limite pare pues parara pero el desplazamiento ya lo ha echo

ahora solo moveremos de lugar las ordenes y le pedimos que realice primero la condición, si no ha sobrepasado esta moverá el mc fondo si lo ha echo se parara,para ello tendremos que utilizar la condición else el código quedaría así

codigo1
Código PHP:
b.onRollOver = function() {
    
onEnterFrame = function () {
        if (
fondo._x>600) {
            
onEnterFrame Null;
        }else{
        
fondo._x += 5;
        }
    };
};
b.onRollOut = function() {
    
onEnterFrame null;
};
b2.onRollOver = function() {
    
onEnterFrame = function () {
        if (
fondo._x<100) {
            
onEnterFrame null;
        }else{
        
fondo._x -= 5;
        }
    };
};
b2.onRollOut = function() {
    
onEnterFrame null;
}; 
otra forma de poder realizar esta función seria poner el limite directamente dentro de la condición pero esto crearía una cierta diferencia
codigo2
Código PHP:
 b.onRollOver = function() {
    
onEnterFrame = function () {
        
fondo._x += 5;
        if (
fondo._x>600) {
        
fondo._x 600;
        }
    };
};
b.onRollOut = function() {
    
onEnterFrame null;
};
b2.onRollOver = function() {
    
onEnterFrame = function () {
        
fondo._x -= 5;
        if (
fondo._x<100) {
            
fondo._x 100;
        
        }
    };
};
b2.onRollOut = function() {
    
onEnterFrame null;
}; 
como veras ahora la condiciones piden que al sobre pasar los limites estas detengan al mc fondo tanto al ir a la derecha como a la izquierda

Que diferencia ay??


en el codigo1 tiene que primero verificar la condición para poder avanzar de posición, así que utilizando el código 1 aumenta la velocidad a 33 fondo._x += 33;

esto hará que el mc fondo no llegue al limite y se quede unos pixeles fuera de el limite mientras que el código 2 le pide que se coloque justo en el limite

Conflictos con enterframe

ahora te mostrare un problema básico a la hora de utilizar el onEnterFrame = null;

descargarte este archivo,

este archivo tiene un nuevo mc que tiene por nombre de instance manilla, y una nueva función que hace que el mc manilla rote sin para el código es
para que realice este movimiento es
Código PHP:
onEnterFrame = function () {
        
manilla._rotation += 5;

en esta parte de la explicación debemos realizar una función que no pare la manilla ya que el código onEnterFrame = null; anula todos los enterframe que ay en la escena incluida al que mueve la manilla,

para ello utilizaremos otra función llamada setInterval traducido a nuestro lenguaje seria algo así como (intervalo de tiempo para volver a realizar la función xxx)y clearInterval que sirve para eliminar los intervalos y así no se reproduzcan indefinidamente, también crearemos funciones para el desplazamiento derecho he izquierdo estas remplazaran a los enterframes

Codigo3

Código PHP:
onEnterFrame = function () {
    
manilla._rotation += 5;
};

b.onRollOver = function() {
    
intervalo_der setInterval(mover_derecha70);
};
b.onRollOut = function() {
    
clearInterval(intervalo_der);
};
b2.onRollOver = function() {
    
intervalo_izq=setInterval(mover_izquierda,70);
};
b2.onRollOut = function() {
    
clearInterval(intervalo_izq);
};
function 
mover_derecha() {
    
fondo._x += 5;
    if (
fondo._x>600) {
        
fondo._x 600;
        
clearInterval(intervalo_der);

    }
}
function 
mover_izquierda() {
    
fondo._x -= 5;
    if (
fondo._x<100) {
        
fondo._x 100;
        
clearInterval(intervalo_izq);

    }

primero creamos una función llamada mover_derecha y tenemos que que añadir una nueva linea de código que clearInterval(intervalo_der); para detener el intervalo

Código PHP:
function mover_derecha() {
    
fondo._x += 5;
    if (
fondo._x>600) {
        
fondo._x 600;
        
clearInterval(intervalo_der);

    }

para activar el intervalo lo aremos así primero le damos un nombre intervalo_der y le asignamos la función que tiene que ejecutar = setInterval(mover_derecha, y también le damos tiempo que se mide por mili segundos 70); esto tiene que ir dentro del botón b.
Código PHP:
b.onRollOver = function() {
    
intervalo_der setInterval(mover_derecha70);
}; 
bueno asta aquí la explicación aun me dejo muchas cosas pero creo que por hoy es suficiente XD

te dejo este código para ver como lo interpretas
Código PHP:
onEnterFrame = function () {
    
manilla._rotation += 5;
};
var 
direccion:Boolean;

b.onRollOver = function() {
    
direccion=true
    intervalo 
setInterval(mover70);
};
b.onRollOut = function() {
    
clearInterval(intervalo);
};
b2.onRollOver = function() {
    
direccion=false
    intervalo 
setInterval(mover70);
};
b2.onRollOut = function() {
    
clearInterval(intervalo);
};
function 
mover() {
    if (
direccion) {
        
fondo._x += 5;
        if (
fondo._x>600) {
            
fondo._x 600;
            
clearInterval(intervalo);

        }
    } else {
        
fondo._x -= 5;
        if (
fondo._x<100) {
            
fondo._x 100;
            
clearInterval(intervalo);

        }
    }

si no entiendes algo dímelo para mejorar mis explicaciones y así mejorar XD
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft
  #15 (permalink)  
Antiguo 02/10/2008, 00:38
 
Fecha de Ingreso: junio-2008
Mensajes: 68
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: b.onrollOver= function() {fondo._x=5;} ayuda por favor

En primer lugar quería darte otra vez 1000 gracias por tus esfuerzos.

onEnterForo=function (){
gracias._=1000
}


Bueno, ya veo muchas cosas más claras. Pero no he tenido el tiempo suficiente de sentarme con toda tranquilidad a 'estudiarme la lección' (con deberes incluídos y todo!!! )
Quiero hacerlo con toda tranquilidad y tiempo para verlo todo bien claro y entenderlo bien para que tus esfuerzos den fruto. Lo que he visto hasta ahora me parece super bien explicado y me interesa un montón.
Pero nos enfrentamos a un nuevo problema:
no puedo descargarme tus archivos
Supongo que será porque trabajo en mac. Me ha pasado muchas veces también con archivos .fla de tutorials y tal. Me lo deja ahí, pero no puedo abrirlos con flash. De todas formas he hecho yo uno nuevo con un item llamado 'manecilla' para probar lo de la rotación. Ya te contaré los resultados cuando haya tenido más tiempo para probarlo todo. No creo que sea antes de mañana por la mañana.
Oye, de verdad, 1000 gracias.
Saludos
  #16 (permalink)  
Antiguo 02/10/2008, 22:02
 
Fecha de Ingreso: junio-2008
Mensajes: 68
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: b.onrollOver= function() {fondo._x=5;} ayuda por favor

uuuuy, uuy, Socorro
Bueno, iré por pasos:

El código1
está clarísimo y funciona perfectamente. Entiendo que primero le decimos que si el fondo llega a x punto, que deje de hacer lo que le ordenemos a continuación, pero que mientras eso no suceda, que vaya moviendo el fondo +5px. (Bueno, + ó - eso).
Lo que no entiendo es lo que me explicas debajo del cód 2 referente al cód 1 sobre lo de la velocidad aumentada a 33. No veo nada al respecto en el cod 1.

El código2
lo veo superlógico. Le dices que cuando llegué a x px, se quede quieto en esos x px. Y de esta forma no hay que utilizar el OnEnterFrame=Null.

El código3
Wow! Algo como esta rotación hasta ahora lo hubiera tenido que hacer con interpolaciones de movimientos cíclicas y más rollos.....
Entiendo que el mover el fondo es un intervalo para que no afecte a la 1. órden de rotación, la cual seguirá pase lo que pase.
Vas dando nombre a los diferentes intervalos y diciéndoles lo que tienen que hacer. Dichos intervalos se ejecutarán en RollOver y se anularán en RollOut.
Luego dices que si se cumple la condición de que el fondo alcanza su límite, que dicho intervalo sea anulado.
Lo veo claro

El código 4 (mis deberes )
Ahora me has pillao
El principio lo veo claro, menos que no entiendo como AS sabe lo quiere decir 'direccion' ya que no es un término en inglés.
Boolean, he visto (bendito google!), que se basa en true o false.
No veo claro claro si el true o false se refiere a derecha o izquierda en este caso, o a mover o no mover. Supongo que se refiere a der o izqu. Tampoco entiendo por qué está en un 'if' lo de: if (direccion) {
fondo._x += 5;

En resúmen, supongo que será que b mueve fondo hacia la der (true), b2 hacia la izqu (false) y que si el fondo llega a x px que se pare y que cuando esto pase ya no se pueda seguir moviéndolo. Todo esto en un intervalo para que manilla siga rotando pase lo que pase. Pero no lo acabo de entender bien. Intenté copiar el código al fla (supongo que esto sería un poco trampa )pero me dice que hay errores.
Lo siento, es que debo ser un poco dura de coco para esto. Es parecido a las matemáticas y éstas en el cole eran lo peor de lo peor para mí. Si dimites, lo entenderé. Por el resto te vuelvo a dar mil gracias por todo, de verdad.
Saludos
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 16:57.