Comunidad de diseño web y desarrollo en internet online

problema con setInterval y Key parece tan fácil pero... :(

Citar            
MensajeEscrito el 29 Ago 2009 03:14 am
el problema lo encontré en otro post viejo ya... pero no fue dada una solución ....

cómo hacer para mover un clip con teclas y que esto se haga NO según los fps sino relativo a tiempo con un setInterval ??¿?¿
el post era algo así:

fermmm escribió:

Tengo un movieclip con un codigo como este:

Código :

onClipEvent (load) {
   function mover(){
      if (Key.isDown (Key.RIGHT)) {
         this._x += 9
      }
      if (Key.isDown (Key.LEFT)) {
         this._x -= 9
      }
   }
setInterval(mover,30)
}



Si paso todo el codigo a la linea de tiempo funciona perfecto, pero si tengo el codigo en el movieclip, el setInterval no funciona y realmente necesito que el codigo este dentro del movieclip, no me sirve que este en la linea de tiempo.
Lo que si puedo hacer, es ejecutar el setInterval en la linea de tiempo y declarar la funcion en el movieclip, pero no se como hacer para llamar una funcion declarada dentro de un movieclip
probe de esta manera y no me funciono:
setInterval (mc.mover, 30)
alguna ayuda para hacer funcionar el setinterval habiendo declarado la función dentro del movieclip?? gracias saludos.

y le respondieron algo que no funciona:

penHolder escribió:

acostumbrate a escribir todo en la linea de tiempo, lo correcto seria ahcerlo de la sig manera,en la linea de tiempo:

Código :

function mover(){
  clip.onLoad = function (){
    if (Key.isDown (Key.RIGHT)) {
         this._x += 9;
    }
    if (Key.isDown (Key.LEFT)) {
         this._x -= 9;
    }
}
var intervalo = setInterval(mover, 30);


si me pueden sacar la duda de cómo hacerlo les agradezco ya que lo di vuelta para todos lados al código y no me funciona :(

(post original: http://foros.cristalab.com/por-que-no-funciona-setinterval-dentro-de-onclipevent-t57671/

Por Mr. D. Vided

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 29 Ago 2009 01:48 pm
No hace falta el setInterval para mover el clip, prueba algo así

Código ActionScript :

speed = 0
listener = {}
listener.onKeyDown = function(){
   if (Key.isDown (Key.RIGHT)) {
         speed = 5
    }
    if (Key.isDown (Key.LEFT)) {
         speed = -5
    }
}
Key.addListener(listener)


El speed es una variable que tiene que usar tu MC para moverse. Supongamos que el clip se llama "bola", puedes agregar

Código ActionScript :

this.onEnterFrame = function(){
   bola._x =+speed
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 Ago 2009 05:30 pm
emm.. :lol: tenés razón ...pero ... mi duda igual iba por otro lado y la planteé mal U_U

tengo que hacer que un clip se mueva como ese...pero no depende de que el usuario apriete una tecla sino de una variable que se activa en un frame de una línea de tiempo... y prefiero controlarlo por medio de setInterval para más flexibilidad...

entonces mi problema es... :meditar:

Código ActionScript :

speed=50;


function mover(){
   fondo._x-=10;
   if(fondo._x==xfinal){
      fondo._x=xinicial;
   }
}
var fondoInt = setInterval(fondo, "mover", speed);

y no sé si meter eso adentro de una funcion tipo fondo.onLoad=function(){ (lo probé pero no funcionó :( )
algo así ... supongo que faltaría algo como updateAfterEvent() pero no ando muy canchero con los setInterval :(

resumiendo... el fondo se mueve hacia la izquierda desde la posicion inicial (xinicial) hasta la final (xfinal) y se loopea, esto dependiendo de la variable speed ... esta variable empieza siendo 50 pero dentro de otros mc se va variando para que sea mayor... y por lo tanto el fondo avance más lento...

muchas gracias por la otra respuesta igual que me sirvió también (y)

Por Mr. D. Vided

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 31 Ago 2009 04:26 am
ya lo solucioné... o eso parece por ahora :lol:

Código ActionScript :

speed = 20;
fondo._x = xInicial;
mover = function () {
   fondo._x -= distPaso;
   if (fondo._x == pasoFinal) {
      fondo._x = xInicial;
   }
}
var inter = setInterval(mover,speed);


donde xInicial es xInicial sería el punto de donde empieza a moverse la imagen.. el xFinal el punto donde ya se completa el loop (que a la vista coincide la imagen con la que está en el xInicial).. la cantidad de pasos sería en cuántos movimientos va a completarse el loop... y para que no haya saltos, del penúltimo paso (pasoFinal : P) se salta al xInicial

para hallar el paso Final hice:
distTotal = xInicial-xFinal
distPaso = distTotal/pasos
pasoFinal = xFinal+distPaso

y solo cambiando la variable speed el fondo va más rápido o más lento .. sin saltos

si alguien tiene una mejor forma se lo agradezco :)

Por Mr. D. Vided

10 de clabLevel



 

firefox

 

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