我正在编写正在进行的游戏,但我遇到了一个小问题。我正在使用keyPressed函数,当我向左移动时,我突然又快速地向右移动,我的矩形停止了(反之亦然)。在我的游戏中会有躲避,所以尽可能快地切换方向很重要。我该怎么办?
//main file, sketch.js:
var person;
function setup() {
createCanvas(380, 720);
person = new Person();
}
function draw() {
background(64, 64, 64);
person.show();
person.move();
}
function keyReleased() {
if (keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW) {
person.setDirX(0);
}
}
function keyPressed() {
if (keyCode === RIGHT_ARROW) {
person.setDirX(1)
}
else if (keyCode === LEFT_ARROW) {
person.setDirX(-1);
}
}
//person(rectangle) file, person.js:
function Person() {
this.x = width/2;
this.y = height - 20;
this.xdir = 0;
this.ydir = -0.25;
this.show = function() {
noStroke();
fill(250);
rectMode(CENTER);
rect(this.x, this.y, 25, 25);
}
this.setDirX = function(dir) {
this.xdir = dir;
}
this.move = function(dir) {
this.x += this.xdir * 5;
this.y += this.ydir;
}
}
答案 0 :(得分:2)
尝试思考当你快速从左手拿到按住右键时你按下和释放的按键。这就是你正在做的事情:
您的代码检测到您释放了左键并将移动速度设置为0,这就是您停止移动的原因。
要解决此问题,您需要跟踪当前按下的键。您可以通过跟踪您关心的每个键的布尔变量,在keyPressed()
和keyReleased()
函数中设置这些布尔值,并在draw()
函数中检查这些布尔值来实现此目的。 p>
无耻的自我推销:我写了一篇关于使用这种方法的教程here。请参阅标题为"处理多个密钥"的部分。本教程适用于Processing,但同样的想法适用于P5.js。