Comunidad de diseño web y desarrollo en internet online

problemas con el movimiento

Citar            
MensajeEscrito el 01 Ago 2008 07:36 am
tengo un clip de pelicula persona_mc con el script


onClipEvent (load) {
_root.up=true
_root.down=true
_root.left=true
_root.right=true
}
onClipEvent (enterFrame)
{
if (Key.isDown(Key.LEFT) && _root.left == true) {
_x-=25


}
if (Key.isDown(Key.RIGHT) && _root.right == true) {
_x+=25
}

if (Key.isDown(Key.UP) && _root.up == true) {
_y-=25
}

if (Key.isDown(Key.DOWN) && _root.down == true) {
_y+=25
}

}


quiero que vaya a menos velocidad, pero que no deje de ir celda por celda soble una cuadricula que tengo en la pelicula. Si bajara los valores de "x" y "y", no seguiria la cuadricula ¿como debo hacerlo? :?

Por ferriruiz

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Ago 2008 09:32 am
No es recomendable tener un onterFrame para chequear cuando se ha presionado una tecla, para esto existen los objetos que pueden servir de listeners, en este caso a una tecla, este ejemplo lo que hace es que chequea que tecla se ha presionado y cambia los valores de posX o posY dentro del movie que quieres mover y entonces este se desplaza hasta la posición indicada con un easing. determinado:

Código :

//---Función que captura la tecla presionada

var listener:Object = new Object();
listener.onKeyDown = function():Void{
   
   switch(Key.getCode()){
      
      //---Tecla derecha
      case 39:         
         
         _root.cuadro.posX += 25;
         
      break;
      
      //---Tecla izquierda
      case 37:
      
         _root.cuadro.posX -= 25;
      
      break;
      
      //---Tecla arriba
      case 38:
      
         _root.cuadro.posY -= 25;
      
      //---Tecla abajo
      case 40:
      
         _root.cuadro.posY += 25;
      
      break;
      
   }
   
}

Key.addListener(listener);

//---Función de mover el movie hacia las posiciones enviadas por el listener
//---En este caso se llamará cuadro.

//Se declaran las x e y iniciales

this.cuadro.posX = this.cuadro._x; 
this.cuadro.posY = this.cuadro._y;

this.cuadro.onEnterFrame = function():Void{
   
   var difX:Number = (this.posX - this._x) * .5;
   var difY:Number = (this.posY - this._y) * .5;
   
   this._x += difX;
   this._y += difY;
   
}


Este código es para poner en el frame encima de tu objeto con nombre de instancia "cuadro", no lo pongas encima del movie o te lanzará un herror.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 01 Ago 2008 09:33 am
bueno gracias pero este codigo se me queda grande

voy a hacerlo con el mio... aunque vaya un poquito rapido, al final me ha quedado bien

Por ferriruiz

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Ago 2008 10:18 am
Me imagino que si no quieres hacerlo por problemas de tamaño del código no sea:

La solución que te di, sin comentarios ni espacios tiene 18 líneas y 257 caracteres y hace lo mismo que tenías anteriormente, solamente tenía añadido de líneas de más lo que hacía que el movie se moviera con easing y no bruscamente, que era precisamente lo que preguntabas como resolver.

Código :

var listener:Object = new Object();
listener.onKeyDown = function():Void  {
   switch (Key.getCode()) {
      case 39 :
         _root.cuadro._x += 25;
         break;
      case 37 :
         _root.cuadro._x -= 25;
         break;
      case 38 :
         _root.cuadro._y -= 25;
         break;
      case 40 :
         _root.cuadro._y += 25;
         break;
   }
};
Key.addListener(listener);


Y la que tienes hecha ahora, sin espacios ni comentarios tiene 20 líneas y 301 caracteres:

Código :

onClipEvent (load) {
onClipEvent (load) {
   _root.up = true;
   _root.down = true;
   _root.left = true;
   _root.right = true;
}
onClipEvent (enterFrame) {
   if (Key.isDown(Key.LEFT) && _root.left == true) {
      _x -= 25;
   }
   if (Key.isDown(Key.RIGHT) && _root.right == true) {
      _x += 25;
   }
   if (Key.isDown(Key.UP) && _root.up == true) {
      _y -= 25;
   }
   if (Key.isDown(Key.DOWN) && _root.down == true) {
      _y += 25;
   }
}


eso sin contar que como te he dicho no está optimizada porque está chequeando todo el tiempo si se ha presionado una tecla cuando esto lo debería hacer solo cuando la presionas.

Amigo, antes de preguntar en un foro, primero piensa si realmente necesitas lo que preguntas, porque si alguien se esfuerza por darte soluciones y las desechas porque de todas formas la solución que tenías no estaba mal, haces a los demás perder el tiempo.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox

 

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