Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript进行水平移动_Javascript_Html_Canvas - Fatal编程技术网

使用Javascript进行水平移动

使用Javascript进行水平移动,javascript,html,canvas,Javascript,Html,Canvas,我觉得自己像个十足的傻瓜,我让它工作了,然后我不小心忘了保存它!我是个白痴。我花了最后一天的时间试图重现我所拥有的,但我做不到。基本上(从我上次的保存)我有: function canvasMove(e) { if(!e) var e = window.event; var downcheck; var upcheck; var leftcheck; var rightcheck; if(e.keyCode == '38') {

我觉得自己像个十足的傻瓜,我让它工作了,然后我不小心忘了保存它!我是个白痴。我花了最后一天的时间试图重现我所拥有的,但我做不到。基本上(从我上次的保存)我有:

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不支持检查是否同时按下两个键的功能。我想实现的是,当用户按下并离开时,他们将沿对角线移动。忽略“计数”功能,它只是跟踪用户移动了多少

我用else和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;
}

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

“当然,问题是Javascrpt不支持检查是否同时按下两个键。我想要完成的是,当用户按下并离开时,它们将沿对角线移动。”您是说您以前成功地让浏览器识别多个并发按键?现在还不清楚你在找什么。某些现有代码不起作用吗?如果是的话,代码的哪一部分?是的。我让它工作,但我不记得我做了什么。我想知道是否还有其他人可以尝试一下,或者提出更好的解决方案。我已经解释过了,我希望它能够水平移动。该死!我的问题是我没有意识到全局变量和局部变量之间的区别。在我最初的版本中,我使用了全局变量,而在这个版本中,我使用了局部变量。你生活和学习,是吗?