javascript - 为什么当我释放键时我的函数返回值?
问题描述
我知道这可能是一个愚蠢的问题,但我无法弄清楚我在 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);
}
解决方案
该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;
}
}
请注意,因为我们没有arrTest
在函数中定义新变量,keyPressed()
所以它将自动访问您在上面进一步定义的变量。
这是相应的修改草图。
keyPressed() 函数在您的代码中似乎被执行“两次”的原因是它作为循环的每次迭代的一部分被执行并且在按下一个键时自动执行。draw()
推荐阅读
- laravel - Laravel - 断言 Bugsnag 被警告
- spring-cloud-dataflow - 无法删除发布:状态机未处于准备执行删除的状态
- cookies - 如果页面重新加载,Appsflyer OneLink 将重定向到 App Store 而不是已安装的应用程序
- php - 警告:未定义的属性:D:\xampp\htdocs\joomla4\components\com_football\tmpl\team\default.php 中的 Joomla\CMS\Object\CMSObject::$playid 第 120 行
- arrays - NodeJS将两个数据与嵌套键结合起来
- flutter - 如何进行群对群通信?颤振块
- r - 运行 lp 求解函数时出现致命错误
- internationalization - svelte-i18n 如何缩写货币显示?
- reactjs - getCurrentPosition PWA React 无法返回位置失败
- azure - Azure 容器实例无 IP