【问题标题】:Why and (&) in if statement is not working? [duplicate]为什么 if 语句中的和 (&) 不起作用? [复制]
【发布时间】:2017-09-11 00:56:36
【问题描述】:

所以我正在制作一个 html5 游戏,我正在移动中工作。玩家可以用 w, a, s ,d 键移动。效果很好,但我想添加一个力量..比如如果玩家按下 + 空格键或 d + 空格键就会触发一个技能。

我使用了 and 运算符,它应该在我的理论中起作用,但它不起作用。 我是 html5 的新手,任何帮助将不胜感激。提前致谢。

这是我的代码...只需复制粘贴到 html 注释上。

<canvas id="canvas" width="800" height="500" style="border:1px solid #000000;"></canvas>

<script>
    var c = document.getElementById("canvas").getContext("2d");


    var WIDTH = 800;
    var HEIGHT = 500;


    var player = {
        x: Math.random() * WIDTH,
        y: Math.random() * HEIGHT,
        width: 30,
        height: 30,
        color: 'black',

        pressingDown: false,
        pressingUp: false,
        pressingLeft: false,
        pressingRight: false,


        pressinpowerRight: false,
        pressinpowerLeft: false,
    };



    drawEntity = function(e) {
        c.fillStyle = e.color;
        c.fillRect(e.x - e.width / 2, e.y - e.height / 2, e.width, e.height);
    }


    document.onkeydown = function(event) {
        if (event.keyCode === 68) //d
            player.pressingRight = true;
        else if (event.keyCode === 83) //s
            player.pressingDown = true;
        else if (event.keyCode === 65) //a
            player.pressingLeft = true;
        else if (event.keyCode === 87) // w
            player.pressingUp = true;


        else if (event.keyCode === 68 && event.keyCode === 32) // this statement is not working
            player.pressinpowerRight = true;
        else if (event.keyCode === 65 && event.keyCode === 32) // this statement is not working

            player.pressinpowerLeft = true;

    }

    document.onkeyup = function(event) {
        if (event.keyCode === 68) //d
            player.pressingRight = false;
        else if (event.keyCode === 83) //s
            player.pressingDown = false;
        else if (event.keyCode === 65) //a
            player.pressingLeft = false;
        else if (event.keyCode === 87) // w
            player.pressingUp = false;

        else if (event.keyCode === 68 && event.keyCode === 32) // not working
            player.pressinpowerRight = false;
        else if (event.keyCode === 65 && event.keyCode === 32) // not working
            player.pressinpowerLeft = false;
    }

    updatePlayerPosition = function() {
        if (player.pressingRight)
            player.x += 5;
        if (player.pressingLeft)
            player.x -= 5;
        if (player.pressingDown)
            player.y += 5;
        if (player.pressingUp)
            player.y -= 5;

        if (player.pressingpowerRight)
            player.x += 50;
        if (player.pressingpowerLeft)
            player.x -= 50;
    }

    update = function() {
        c.clearRect(0, 0, WIDTH, HEIGHT);

        updatePlayerPosition();
        drawEntity(player);

    }

    setInterval(update, 40);
</script>

【问题讨论】:

  • 您的事件将只包含一个keyCode 属性的数值。所以像event.keyCode === 68 &amp;&amp; event.keyCode === 32 这样的东西永远不会变成true
  • event.keyCode 不能等于两个值
  • event.keyCode 不能同时是两个东西,它只能是一个数字
  • 好吧,这个问题有什么解决办法吗??
  • 或者|| 或许?

标签: javascript html canvas


【解决方案1】:

尝试创建一个 previousButtonKey 全局变量并始终记录最后一个键,然后将 previousButtonKey 与另一个键检查以根据您的条件组合两个键。

例如。要按下的第一个键是“Shift”,将其存储到变量中,然后一旦发生另一个键事件,检查前一个键和新键。如果它有效,则执行您想要的操作。

【讨论】:

  • 好的,非常感谢您的逻辑,但我是 js 新手,我找不到合适的代码来执行此操作。所以请您提供此逻辑的代码。再次感谢。
猜你喜欢
  • 2021-01-28
  • 2022-12-04
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多