为什么我的函数在释放密钥时返回值?



我知道这可能是一个愚蠢的问题,但我无法弄清楚我的代码在p5中发生了什么.js(我使用在线编辑器(。

我正在制作一个简单的贪吃蛇游戏,但是当我调用该函数以添加某个值来移动头部(现在只是头部(时,它会返回我想要的值,但是当我释放密钥时又这样做了,尽管我也叫这个:

function keyReleased(){
return false;
}

这些是我在草图文件中调用的函数。

let w = 87;
let a = 65;
let s = 83;
let d = 68;
let stepToDo = 10;
function keyPressed(axis){
if (axis === 0){
if(keyCode === a){
keyCode = 0;
return -stepToDo;
} else if(keyCode === d){
keyCode = 0;
return stepToDo;
} else {
return 0;
}
} else if (axis === 1) {
if(keyCode === w){
keyCode = 0;
return -stepToDo;
} else if(keyCode === s){
keyCode = 0;
return stepToDo;
} else {
return 0;
}
}
}
function keyReleased(){
return false;
}

这是草图文件。

let arrTest = [200, 200];

function setup() {
createCanvas(400, 400);
}
function draw() {
background(220);
arrTest[0] = arrTest[0] + keyPressed(0);
arrTest[1] = arrTest[1] + keyPressed(1);
keyReleased();
//console.log(arrTest);
rect (arrTest[0], arrTest[1], 10, 10);
}

链接到草图本身 https://editor.p5js.org/antolab/sketches/_Lzz41cos

keyPressed()函数是一个事件侦听器。 您不必从主draw()循环中调用它;相反,每次按下某个键时都会自动调用它。这样,您就可以使用它根据输入键更改位置数组。例如如下:

function keyPressed() {
if (keyCode === a) {
arrTest[0] = arrTest[0] - stepToDo;
} else if (keyCode === d) {
arrTest[0] = arrTest[0] + stepToDo;
} else if (keyCode === w) {
arrTest[1] = arrTest[1] - stepToDo;
} else if (keyCode === s) {
arrTest[1] = arrTest[1] + stepToDo;
}
}

请注意,由于我们没有在keyPressed()函数中定义新的arrTest变量,因此它将自动访问您在上面进一步定义的变量。 这是相应的修改草图。

keyPressed(( 函数在您的代码中似乎被执行了"两次"的原因是,它作为draw()循环的每次迭代的一部分执行,并在按下键时自动执行。

最新更新