使用Javascript进行水平移动

时间:2010-08-27 17:56:35

标签: javascript html5 canvas

我觉得这是一个完整的klutz,我有这个工作,然后我不小心忘了保存它!我是个白痴。我花了最后一天试图重新创造我所拥有的东西,但我不能这样做。基本上(从我上次保存)我有这个:

function canvasMove(e) {

    if(!e) var e = window.event;

    var downcheck;
    var upcheck;
    var leftcheck;
    var rightcheck;

    if(e.keyCode == '38') {

        if(up + down == 0) downcheck = false;
        else downcheck = true; 

        e.preventDefault();

    } 


    if(e.keyCode == '40') {

        if(up + down > HEIGHT - 110) upcheck = false;
        else upcheck = true; 
        e.preventDefault();
    } 


    if(e.keyCode == '37') { 

        if(left + right == 0) rightcheck = false;
        else rightcheck = true;
        e.preventDefault();
    } 


    if(e.keyCode == "39") { 
        if(left + right > WIDTH - 110) leftcheck = false;
        else leftcheck = true; 
        e.preventDefault();
    }

    if(leftcheck == true) { left += 10; counting() };
    if(rightcheck == true) { right -= 10; counting() };
    if(upcheck == true) { up += 10; counting(true) };
    if(downcheck == true) { down -= 10; counting(true) };

}

问题当然是Javascrpt不支持检查两个键是否同时被按下的能力。我想要完成的是当用户按下并离开时他们将对角移动。忽略“计数”功能,只是为了跟踪用户移动了多少。

我设法用其他方式和if语句完成了这个,不能少!所以我想知道你们是否可以试一试。每个键if语句中的第一个if语句是这样的,用户不能离开画布框。然后我有一个通过重绘画布来移动用户的函数。

function redraw() {
    clear(draw);
    draw.fillStyle = 'rgba(0,0,0,0.5)';
    draw.fillRect(left + right, up + down, '100', '100');   
}

“清除”功能只是一个简单的功能,可以清除整个画布。这完全由init函数控制,如下所示:

function init() {
    canvas = document.getElementById('game');
    HEIGHT = canvas.height;
    WIDTH = canvas.width;
    draw = canvas.getContext('2d');

    setInterval(redraw, 30);

    document.onkeydown = canvasMove;
}

1 个答案:

答案 0 :(得分:1)

你的-check标志需要是全局变量而不是函数范围的变量,否则它们永远不会在keydown事件之间保持设置(一次只处理一个键)。您还需要一个键盘事件处理程序,它将在释放键时取消设置正确的标志。