有没有办法通过用户输入连续移动 P5 中的对象?

Is there a way to continuously move an object in P5 via user input?

我很确定在查看文档后这不是框架的目的,但我有一个我正在辅导的学生真的想移动在 P5 上绘制的对象canvas 使用输入法,例如使用方向键。
我能够弄清楚的是:

let value = 0;
function setup() {
  // Create a canvas with a specified width and height
  createCanvas(400, 400);

  // Fill in background color
  background("blue");
}

function draw() {
    background(200);
  rectMode(CENTER);
  translate(value, value, value);
    translate(150, 150, 150)
  rect(0, 0, 20, 20);
    
}

function keyPressed() {
    while(true) {
         if (keyCode == LEFT_ARROW) {
            value = 20;
        }
    }
}

当然,这使用了无限循环,因此不太理想。有谁知道实现此目标的更好方法?

在我的系统(Chrome、MacOS)上,如果我按住向左箭头键,则会重复调用 keyPressed。下面是一个非常简单的例子。专注于片段并按住左箭头键 - 观察 xPos 每帧都在减少。

您实际上需要在 keyPressed 方法中 做一些事情 。现在,这个值只是被重复赋值,当然,你不希望有一个无限循环。

郑重声明,根据 the docskeyPressed 不能保证在所有系统上都以这种方式工作,因此您可能需要更复杂的逻辑,具体取决于您想要的系统到运行这个。

function setup() {
  createCanvas(640, 360);
}

let xPos = 100;
function draw() {
    background(0,0,255);
    fill(255,0,0);
    ellipse(xPos,50,10,10);
}

function keyPressed(event) {
  if (keyCode == LEFT_ARROW) {
    xPos -= 1;
  } else if (keyCode == RIGHT_ARROW) {
    xPos += 1;
  }

  // this prevents default browser behavior
  event.preventDefault();
  return false; 
}
<script src="//cdnjs.cloudflare.com/ajax/libs/p5.js/0.3.3/p5.min.js"></script>

let acl;
let pos;
let value = 0;

function setup() {
  acl = createVector(0,0);
  pos = createVector(0,0);
  // Create a canvas with a specified width and height
  createCanvas(400, 400);

  // Fill in background color
  background("blue");
}

function draw() {
    background(200);
  rectMode(CENTER);
  rect(pos.x, pos.y, 20, 20);
  pos.add(acl);
    
}

function keyPressed() {
    
         if (keyCode == LEFT_ARROW) {
            acl.set(-1,0)
        }
  if(keyCode == RIGHT_ARROW){
    acl.set(1,0)
  }
  
    
}