Hey there German,
I took a look at your code and saw that without changing the idea of your original code it would be a little bit complicated to solve the problem. But i did it anyway:
ActionScript Code:
stage.addEventListener(KeyboardEvent.KEY_DOWN, moveDrawing);
var keyPressed:String;
var keyEnabled:Array = [true, true, true, true];
function moveDrawing(event:KeyboardEvent):void {
var SPEED:uint = 5;
switch (event.keyCode) {
case Keyboard.RIGHT :
if (keyEnabled[0]) {
mc_1.x += SPEED;
keyPressed="right";
enableAll();
}
break;
case Keyboard.LEFT :
if (keyEnabled[1]) {
mc_1.x-=SPEED;
keyPressed="left";
enableAll();
}
break;
case Keyboard.UP :
if (keyEnabled[2]) {
mc_1.y-=SPEED;
keyPressed="up";
enableAll();
}
break;
case Keyboard.DOWN :
if (keyEnabled[3]) {
mc_1.y+=SPEED;
keyPressed="down";
enableAll();
}
break;
}
function enableAll():void {
keyEnabled = [true, true, true, true];
}
}
mc_1.addEventListener(Event.ENTER_FRAME, rectangleHit);
function rectangleHit(event:Event):void {
if (mc_1.hitTestObject(rectangle_mc)||mc_1.hitTestObject(rectangle_mc2)) {
disableKey();
trace("rectangle & 2 hit");
}
if (mc_1.hitTestObject(rectangle_mc1)||mc_1.hitTestObject(rectangle_mc3)) {
disableKey();
trace("rectangle1 &3 hit");
}
function disableKey(key:String = keyPressed):void {
if (key=="right") {
keyEnabled[0]=false;
}
if (key=="left") {
keyEnabled[1]=false;
}
if (key=="up") {
keyEnabled[2]=false;
}
if (key=="down") {
keyEnabled[3]=false;
}
}
}
What it basically does is that when there is collision with a rectangle, he disables the
mc_1 to go any further in the current direction.
When
mc_1 collides with a rectangle, the code checks what key was pressed in order to create that collision. Then whenever a key is pressed it checks whether it is not the key that caused the collision, when it that key, he simply ignores the key being pressed. When a different key is pressed the code re enables the disabled key.