El movimiento lo trabaje con variables booleanas y un evento KeyDown, si la key esta presionada se cambiar a true la variable y hace el movimiento que se encuentra en un Enter_Frame y se ejecuta con true (en este caso el movimiento es sobre los ejes), el drama aca es que si se esta moviendo para un lado y presiona otra tecla las dos quedan en true y el personaje va en diagonal (trate de solucionarlo con un IF pero no pude). Despues si colisiona contra la caja la velocidad se va a 0 y las variables se cambian a false, el problema es que al querer mover el personaje despues de que se frenaron se va trabando, osea (mirando la imagen) si colisiona con la caja que esta derecho del inicio del personaje y me quiero mover para abajo tengo que clickear la tecla varias veces hasta que salga del recuadro de la caja (lo que entiendo es que al mover para abajo detecta que esta colisionando el personaje y me manda la variable en false)...
Imagen:

Nose si se me entendio, si saben un metodo o como solucionarlo joya.
Codigo por las dudas:
Código :
import flash.events.KeyboardEvent; import flash.events.Event; var personaje:Pj = new Pj(); addChild(personaje); personaje.x = 10; personaje.y = 282; personaje.scaleY = 1.6; personaje.scaleX = 1.6; var derecha:Boolean = false; var izquierda:Boolean = false; var abajo:Boolean = false; var arriba:Boolean = false; stage.addEventListener(KeyboardEvent.KEY_DOWN, movimiento); function movimiento(movimiento:KeyboardEvent) { if (movimiento.keyCode == 39) { derecha = true; trace("Derecha "+ derecha); } if (movimiento.keyCode == 37) { izquierda = true; trace("Izquierda " + izquierda); } if (movimiento.keyCode == 40) { abajo = true; trace("Abajo "+ abajo); } if (movimiento.keyCode == 38) { arriba = true; trace("Arriba "+ arriba); } } var velocidad:int = 3; stage.addEventListener(Event.ENTER_FRAME, mover); function mover(tipodeEvento:Event):void { if (derecha == true) { velocidad = 2; personaje.x += velocidad; if (personaje.x >= stage.stageWidth - personaje.width) { derecha = false; } if(personaje.hitTestObject(caja2) || personaje.hitTestObject(caja) || personaje.hitTestObject(caja3)|| personaje.hitTestObject(caja4)|| personaje.hitTestObject(caja5)|| personaje.hitTestObject(caja6)|| personaje.hitTestObject(caja7)|| personaje.hitTestObject(caja8)|| personaje.hitTestObject(caja9)|| personaje.hitTestObject(caja10)|| personaje.hitTestObject(caja11)|| personaje.hitTestObject(caja12)) { velocidad = 0; derecha = false; } } if (izquierda == true) { velocidad = 2; personaje.x -= velocidad; trace(personaje.x); if (personaje.x <= 0) { velocidad = 2; izquierda = false; } if(personaje.hitTestObject(caja2) || personaje.hitTestObject(caja) || personaje.hitTestObject(caja3)|| personaje.hitTestObject(caja4)|| personaje.hitTestObject(caja5)|| personaje.hitTestObject(caja6)|| personaje.hitTestObject(caja7)|| personaje.hitTestObject(caja8)|| personaje.hitTestObject(caja9)|| personaje.hitTestObject(caja10)|| personaje.hitTestObject(caja11)|| personaje.hitTestObject(caja12)) { velocidad = 0; izquierda = false; } } if (abajo == true) {1 velocidad = 2; personaje.y += velocidad; if (personaje.y >= stage.stageHeight - personaje.width) { abajo = false; } if(personaje.hitTestObject(caja2) || personaje.hitTestObject(caja) || personaje.hitTestObject(caja3)|| personaje.hitTestObject(caja4)|| personaje.hitTestObject(caja5)|| personaje.hitTestObject(caja6)|| personaje.hitTestObject(caja7)|| personaje.hitTestObject(caja8)|| personaje.hitTestObject(caja9)|| personaje.hitTestObject(caja10)|| personaje.hitTestObject(caja11)|| personaje.hitTestObject(caja12)) { velocidad = 0; abajo = false; } } if (arriba == true) { velocidad = 2; personaje.y -= velocidad; if (personaje.y <= 0) { arriba = false; } if(personaje.hitTestObject(caja2) || personaje.hitTestObject(caja) || personaje.hitTestObject(caja3)|| personaje.hitTestObject(caja4)|| personaje.hitTestObject(caja5)|| personaje.hitTestObject(caja6)|| personaje.hitTestObject(caja7)|| personaje.hitTestObject(caja8)|| personaje.hitTestObject(caja9)|| personaje.hitTestObject(caja10)|| personaje.hitTestObject(caja11)|| personaje.hitTestObject(caja12)) { velocidad = 0; arriba = false; } } } var caja:HieloCubo = new HieloCubo(); addChild(caja); caja.x = 23; caja.y = 202; caja.scaleY = .7; caja.scaleX = .7; var caja2:HieloCubo = new HieloCubo(); addChild(caja2); caja2.x = 285; caja2.y = 287; caja2.scaleY = .7; caja2.scaleX = .7; var caja3:HieloCubo = new HieloCubo(); addChild(caja3); caja3.x = 261; caja3.y = 362; caja3.scaleY = .7; caja3.scaleX = .7; var caja4:HieloCubo = new HieloCubo(); addChild(caja4); caja4.x = 437; caja4.y = 340; caja4.scaleY = .7; caja4.scaleX = .7; var caja5:HieloCubo = new HieloCubo(); addChild(caja5); caja5.x = 405; caja5.y = 177; caja5.scaleY = .7; caja5.scaleX = .7; var caja6:HieloCubo = new HieloCubo(); addChild(caja6); caja6.x = 271; caja6.y = 177; caja6.scaleY = .7; caja6.scaleX = .7; var caja7:HieloCubo = new HieloCubo(); addChild(caja7); caja7.x = 202; caja7.y = 235; caja7.scaleY = .7; caja7.scaleX = .7; var caja8:HieloCubo = new HieloCubo(); addChild(caja8); caja8.x = 182; caja8.y = 193; caja8.scaleY = .7; caja8.scaleX = .7; var caja9:HieloCubo = new HieloCubo(); addChild(caja9); caja9.x = 48; caja9.y = 21; caja9.scaleY = .7; caja9.scaleX = .7; var caja10:HieloCubo = new HieloCubo(); addChild(caja10); caja10.x = 194; caja10.y = 9; caja10.scaleY = .7; caja10.scaleX = .7; var caja11:HieloCubo = new HieloCubo(); addChild(caja11); caja11.x = 419; caja11.y = 0; caja11.scaleY = .7; caja11.scaleX = .7; var caja12:HieloCubo = new HieloCubo(); addChild(caja12); caja12.x = 499; caja12.y = 52; caja12.scaleY = .7; caja12.scaleX = .7;
Espero que me puedan ayudar, muchas gracias.