首页 > 解决方案 > p5js 中的 keyIsDown() 问题

问题描述

我正在尝试用 p5js 和 p5.play 制作一个基本的 2d 游戏。每次我尝试做任何事情时似乎都会引起问题的一个问题是 keyIsDown 函数。有没有办法在按下之前确定一个键是否按下?如果我用

upKey = keyIsDown(UP_ARROW);

upKey 将显示为未定义,直到我按下向上箭头。有没有办法在按下它们之前将相应的布尔值分配给这些类型的东西?截至目前,我的游戏将无法正常运行,直到我按下每个涉及的键一次。

标签: javascriptp5.js

解决方案


keyIsDown ()函数检查键当前是否按下,即按下。如果您有一个移动的对象,并且您希望多个键能够同时影响其行为,例如沿对角线移动精灵,则可以使用它。

请注意,箭头键也会导致页面滚动,因此您可能希望在游戏中使用其他键.. 但如果您想使用箭头键,这是参考页面中的代码片段

let x = 100;
let y = 100;
function setup() {
  createCanvas(512, 512);
}

function draw() {

  if (keyIsDown(LEFT_ARROW)) {
    x -= 5;
  }

  if (keyIsDown(RIGHT_ARROW)) {
    x += 5;
  }

  if (keyIsDown(UP_ARROW)) {
    y -= 5;
  }

  if (keyIsDown(DOWN_ARROW)) {
    y += 5;
  }

  clear();
  fill(255, 0, 0);
  ellipse(x, y, 50, 50);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.3/p5.min.js"></script>

要在不使用箭头键的情况下实现类似的逻辑,您需要确定要使用的键的键码。

这是一个使用 awsd 键并注销当前按键的键代码的示例。

let x = 50;
let y = 50;
function setup() {
  createCanvas(512, 512);
}
function keyPressed(){
console.log(keyCode);
}

function draw() {
  if (keyIsDown(65)) {
    x -= 5;
    if (x < 0) x = 0;
  }

  if (keyIsDown(68)) {
    x += 5;
    if (x > width) x = width;
  }

  if (keyIsDown(87)) {
    y -= 5;
    if (y < 0) y = 0;
  }

  if (keyIsDown(83)) {
    y += 5;
    if ( y > height) y = height;
  }

  clear();
  fill(255, 0, 0);
  ellipse(x, y, 50, 50);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.3/p5.min.js"></script>


推荐阅读