Crook
Crook

Reputation: 319

as3 - how to stop animation when both keys pressed?

My player stops moving when two keys are pressed at the same time. But the animation still moves. For example, if I press up and down at the same time or right and left at the same time.

On key down event listener:

if (event.keyCode == Keyboard.D)
        {
            isRight = true
        }
        if (event.keyCode == Keyboard.A)
        {
            isLeft = true
        }
        if (event.keyCode == Keyboard.W)
        {
            isUp = true
        }
        if (event.keyCode == Keyboard.S)
        {
            isDown = true
        }

On key up event listener:

if (event.keyCode == Keyboard.D)
        {
            isRight = false
            gotoAndStop(1);
        }
        if (event.keyCode == Keyboard.A)
        {
            isLeft = false
            gotoAndStop(1);
        }
        if (event.keyCode == Keyboard.W)
        {
            isUp = false
            gotoAndStop(1);
        }
        if (event.keyCode == Keyboard.S)
        {
            isDown = false
            gotoAndStop(1);
        }

On enterframe:

if (isRight == true)
        {
            x += 5;
            play();
        }
        if (isLeft == true )
        {
            x -= 5;
            play();
        }
        if (isUp == true)
        {
            y -= 5;
            play();
        }
        if (isDown == true)
        {
            y += 5;
            play();
        }

Upvotes: 0

Views: 118

Answers (2)

Rich
Rich

Reputation: 1051

I don't see any checks to see if more than 1 key is being pressed?

surely you should introduce something like a keycount into the enterframe:

var count:uint = 0;

if (isRight == true){
    count++
    x += 5;
}
if (isLeft == true ){
    count++;
    x -= 5;
}
if (isUp == true){
    count++;
    y -= 5;
}
if (isDown == true){
    count++
    y += 5;
}

if (count > 1) {
    isRight = isLeft = isUp = isDown = false;
    gotoAndStop(1);
} else {
    play();
}

Upvotes: 0

Paweł Audionysos
Paweł Audionysos

Reputation: 606

If players goes x -= 1 and x += 1 it basically moves x += 0 overall. We can easily check that and stop animation in needed:

var iP:Point = new Point(x,y);//try to avoid creating new objects on frame interval
if (isRight) x += 5;
if (isLeft) x -= 5;
if (isUp) y -= 5;
if (isDown) y += 5;
if(!Point.distance(iP,new Point(x,y)) goToAndStop(1);
else play();

Upvotes: 1

Related Questions