0

我的完整代码是 import flash.events.KeyboardEvent; 导入 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;
    }
}

有问题的部分是 //Checking key presses var kUp = false; var kDown = 假;var kLeft = 假;var kRight = 假;var kSpace = 假;

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; }
}

昨晚工作得很好,但今天我把它移到一个新的关键帧上,现在它不工作了。我没有收到任何错误(即使我调试)。它只是不会移动角色,甚至不会出现在输出中。

我对as3还是很陌生,所以我真的不知道该怎么做。

提前致谢。

编辑:玩了一下之后,我发现它不起作用的原因是菜单。菜单有一个按钮和两个文本元素,这很好。我在菜单上使用的代码是这样的:

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);
    }
}

如果我只使用gotoAndStop(2);它可以正常工作,但其他所有内容都会进入第二帧,之后就没有其他工作了。

编辑#2:我已经将其范围缩小到 if 语句本身。

if(e.target == playGameButton)

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

这两个都不行。如果我只是一起删除 if 语句,它就可以很好地工作。

4

3 回答 3

1

这条线似乎有问题

if(getChildAt(i) is platform)

导致错误 1067:将 flash.display:MovieClip 类型的值隐式强制转换为不相关的类型 Class

其余的代码似乎还不错

于 2015-05-08T16:54:06.930 回答
0

尝试e.currentTarget代替e.target. 从文档中:

currentTarget : Object [只读]​​ 使用事件侦听器主动处理 Event 对象的对象。

target : Object [只读]​​ 事件目标。

我不太确定这是你的问题,但targetvs的currentTarget困惑已经让我感到困惑。

于 2012-07-01T18:14:49.393 回答
0

尝试禁用您的按钮 mouseChildren。

playGameButton.mouseChildren = false;
于 2012-06-30T08:43:54.927 回答