Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在p5.js中来回移动rect时停止延迟_Javascript_Html_Web_P5.js - Fatal编程技术网

Javascript 在p5.js中来回移动rect时停止延迟

Javascript 在p5.js中来回移动rect时停止延迟,javascript,html,web,p5.js,Javascript,Html,Web,P5.js,我正在写一个游戏,我遇到了一个小问题。我正在使用按键功能,当我向左移动时,我突然快速地开始向右移动,我的矩形刚好停止(反之亦然)。在我的比赛中会有闪避,所以尽快改变方向是很重要的。我该怎么办 //main file, sketch.js: var person; function setup() { createCanvas(380, 720); person = new Person(); } function draw() { background(64,

我正在写一个游戏,我遇到了一个小问题。我正在使用按键功能,当我向左移动时,我突然快速地开始向右移动,我的矩形刚好停止(反之亦然)。在我的比赛中会有闪避,所以尽快改变方向是很重要的。我该怎么办

//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,这就是您停止移动的原因

要解决此问题,您需要跟踪当前按下的键。要做到这一点,请跟踪所关心的每个键的布尔变量,在
keyPressed()
keyreased()
函数中设置这些布尔值,并在
draw()
函数中检查这些布尔值


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

试着想想,当你快速从按住左键转到按住右键时,你正在按下和释放哪些键。这就是你正在做的:

  • 先按住左键
  • 然后你按住右边。所以在一瞬间,你按住了两个键
  • 然后你放开左边,但继续按住右边
您的代码检测到您释放了左键并将移动速度设置为0,这就是您停止移动的原因

要解决此问题,您需要跟踪当前按下的键。要做到这一点,请跟踪所关心的每个键的布尔变量,在
keyPressed()
keyreased()
函数中设置这些布尔值,并在
draw()
函数中检查这些布尔值

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