首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在2d canvas JavaScript游戏中对角线移动

在2d canvas JavaScript游戏中对角线移动
EN

Stack Overflow用户
提问于 2015-12-07 04:03:38
回答 1查看 1.7K关注 0票数 0

我已经在网上搜寻过这个答案了。如果它被隐藏在某个地方的StackOverflow答案中,我道歉。

我正在开发一款2d canvas JavaScript游戏。

我正在处理带有onkeydown和onkeyup事件的箭头键输入。

我将此输入存储在一个名为Keys的对象中。

代码语言:javascript
复制
var Keys = {
    up: false,
    down: false,
    left: false,
    right: false
};

这是我的事件处理程序的样子:

代码语言:javascript
复制
window.onkeydown = function(e){
     var kc = e.keyCode;
     e.preventDefault();

     if(kc === 37) Keys.left = true;
     else if(kc === 38) Keys.up = true;
     else if(kc === 39) Keys.right = true;
     else if(kc === 40) Keys.down = true;

     move();
 };

window.onkeyup = function(e){
     var kc = e.keyCode;
     e.preventDefault();

     if(kc === 37) Keys.left = false;
     else if(kc === 38) Keys.up = false;
     else if(kc === 39) Keys.right = false;
     else if(kc === 40) Keys.down = false;
};

然后,每次发生keydown事件时,我调用我的move()函数:

代码语言:javascript
复制
var move = function(){

    if(Keys.up){
        hero.y -= 10;
    }

    else if(Keys.down){
        hero.y += 10;
    }

    if(Keys.left){
        hero.x -= 10;
    }

    else if(Keys.right){
        hero.x += 10;
    }

    main();
}

move()函数调用我的main()函数,它只是再次绘制地图。我尽量避免让游戏循环,而是在玩家每次移动时更新地图。

所以当我尝试沿对角线移动时,我的问题就出现了。我可以这样做,但是一旦我松开按下的第二个键,我的角色就会停止。

例如:按向右键,然后按向上键,字符向东北移动。松开Up键,玩家停止。

但是,如果我释放右键,角色会继续向上移动。

另一个小问题是当我同时向左和向右握住时,角色将向左移动,但我希望它停止移动。

EN

回答 1

Stack Overflow用户

发布于 2015-12-07 06:04:47

您提到当您同时按下向左和向右键时,您希望播放器停止移动。您似乎可以通过将move中的else if语句替换为if语句来轻松完成此操作,从而生成一个类似于以下内容的move函数:

代码语言:javascript
复制
var move = function(){

    if(Keys.up){
        hero.y -= 10;
    }

    if(Keys.down){
        hero.y += 10;
    }

    if(Keys.left){
        hero.x -= 10;
    }

    if(Keys.right){
        hero.x += 10;
    }

    main();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34122037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档