addEventListener() isn't detecting KEY_UP nor KEY_DOWN

Posted by Zirenth on Stack Overflow See other posts from Stack Overflow or by Zirenth
Published on 2012-06-30T02:06:57Z Indexed on 2012/06/30 3:16 UTC
Read the original article Hit count: 221

My full code is import flash.events.KeyboardEvent; import flash.events.Event;

//init some variables
var speedX = 0;
var speedY = 0;
msg.visible = false;
var curLevel = 2;
var level = new Array();
var flagVar;
var won = false;

//Adding level platforms
for(var i = 0; i < numChildren; i++) {
    if(getChildAt(i) is platform) {
        level.push(getChildAt(i).getRect(this));
    }
    if(getChildAt(i) is flag) { flagVar = getChildAt(i).getRect(this); }
}

//Checking key presses
var kUp     = false;
var kDown   = false;
var kLeft   = false;
var kRight  = false;
var kSpace  = false;

stage.addEventListener(KeyboardEvent.KEY_DOWN, kD);
stage.addEventListener(KeyboardEvent.KEY_UP, kU);

function kD(k:KeyboardEvent) {
    trace("Key down - " + k.keyCode);
    if(k.keyCode == 32) { kSpace    = true; }
    if(k.keyCode == 37 ) { kLeft    = true; }
    if(k.keyCode == 38) { kUp       = true; }
    if(k.keyCode == 39) { kRight    = true; }
}

function kU(k:KeyboardEvent) {
    trace("Key up - " + k.keyCode);
    if(k.keyCode == 32) { kSpace    = false; }
    if(k.keyCode == 37) { kLeft     = false; }
    if(k.keyCode == 38) { kUp       = false; }
    if(k.keyCode == 39) { kRight    = false; }
}

addEventListener(Event.ENTER_FRAME, loopAround);
function loopAround(e:Event) {

    //horizontal movement
    if(kLeft) {
        speedX = -10;
    } else if(kRight) {
        speedX = 10;
    } else {
        speedX *= 0.5;
    }

    player.x += speedX;

    //horizontal collision checks
    for(var i = 0; i < level.length; i++) {
        if(player.getRect(this).intersects(level[i])) {
            if(speedX > 0) {
                player.x = level[i].left - player.width;
            }
            if(speedX < 0) {
                player.x = level[i].right;
            }

            speedX = 0;
        }
    }

    //vertical movement
    speedY += 1;
    player.y += speedY;
    var jumpable = false;

    //Vertical collision
    for(i = 0; i < level.length; i++) {
        if(player.getRect(this).intersects(level[i])) {
            if(speedY > 0) {
                player.y = level[i].top - player.height;
                speedY = 0;
                jumpable = true;
            }
            if(speedY < 0) {
                player.y = level[i].bottom;
                speedY *= -0.5;
            }
        }
    }

     //JUMP!
    if((kUp || kSpace) && jumpable) {
        speedY=-20;
    }

    //Moving camera and other
    this.x = -player.x + (stage.stageWidth/2);
    this.y = -player.y + (stage.stageHeight/2);
    msg.x = player.x - (msg.width/2);
    msg.y = player.y - (msg.height/2);

    //Checking win
    if(player.getRect(this).intersects(flagVar)) {
        msg.visible = true;
        won = true;
    }

    //Check for next level request
    if(kSpace && won) {
        curLevel++;
        gotoAndStop(curLevel);
        won = false;
    }
}

The section in question is //Checking key presses var kUp = false; var kDown = false; var kLeft = false; var kRight = false; var kSpace = false;

stage.addEventListener(KeyboardEvent.KEY_DOWN, kD);
stage.addEventListener(KeyboardEvent.KEY_UP, kU);

function kD(k:KeyboardEvent) {
    trace("Key down - " + k.keyCode);
    if(k.keyCode == 32) { kSpace    = true; }
    if(k.keyCode == 37 ) { kLeft    = true; }
    if(k.keyCode == 38) { kUp       = true; }
    if(k.keyCode == 39) { kRight    = true; }
}

function kU(k:KeyboardEvent) {
    trace("Key up - " + k.keyCode);
    if(k.keyCode == 32) { kSpace    = false; }
    if(k.keyCode == 37) { kLeft     = false; }
    if(k.keyCode == 38) { kUp       = false; }
    if(k.keyCode == 39) { kRight    = false; }
}

This was working fine last night, but today I moved it to a new keyframe and now it's not working. I'm not getting any errors (even if I debug). It just won't move the character or even show up in output.

I'm still quite new to as3, so I don't really know what to do.

Thanks in advance.

Edit: After playing with it a bit, I've found out that the reason it's not working is due to the menu. The menu has a single button and two text elements, which are fine. The code that I'm using on the menu is this:

import flash.events.MouseEvent;

stop();

var format:TextFormat = new TextFormat();
format.size = 26;
format.bold = true;
playGameButton.setStyle("textFormat", format);

stage.addEventListener(MouseEvent.CLICK, playGame);
function playGame(e:MouseEvent) {
    if(e.target.name == "playGameButton") {
        gotoAndStop(2);
    }
}

If I use just gotoAndStop(2); it works fine, but with everything else it just goes to the second frame, and nothing else works after that.

Edit #2: I've narrowed it down even farther to the if statement itself.

if(e.target == playGameButton)

if(e.target.name == "playGameButton")

Both of those don't work. If I just remove the if statement all together it works perfectly fine.

© Stack Overflow or respective owner

Related posts about actionscript-3

Related posts about flash