在p5.js中来回移动矩形时停止延迟

时间:2017-03-11 04:37:05

标签: javascript html web p5.js

我正在编写正在进行的游戏,但我遇到了一个小问题。我正在使用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;
    }
}

1 个答案:

答案 0 :(得分:2)

尝试思考当你快速从左手拿到按住右键时你按下和释放的按键。这就是你正在做的事情:

  • 首先,你向左按住。
  • 然后你按下右边。因此,只需一瞬间,您就可以按住两个键。
  • 然后你放开左边,但继续按下右边。

您的代码检测到您释放了左键并将移动速度设置为0,这就是您停止移动的原因。

要解决此问题,您需要跟踪当前按下的键。您可以通过跟踪您关心的每个键的布尔变量,在keyPressed()keyReleased()函数中设置这些布尔值,并在draw()函数中检查这些布尔值来实现此目的。 p>

无耻的自我推销:我写了一篇关于使用这种方法的教程here。请参阅标题为"处理多个密钥"的部分。本教程适用于Processing,但同样的想法适用于P5.js。