keyPressed() 事件在我停止按键后继续触发

keyPressed() event carries on firing even after i stop pressing the key

因此,我绘制的对象开始向上或向下移动,具体取决于我按下的箭头键,但一旦我松开它,它就会继续朝同一方向移动,除非我按随机键,否则它不会停止。如果我向上按,它就会开始向上移动,并且即使在松开之后也会继续向上移动。如果我然后按下它开始向下移动并继续向下移动,即使我不再按下它。如果在移动时按下向上箭头键或向下箭头键以外的任何键,它将停止移动。

主要素描:

Defender defender1;
PImage background;
int x=0; //global variable background location

void setup() {
    size(800,400);
    background = loadImage("spaceBackground.jpg");
    background.resize(width,height);
    defender1 = new Defender(200,200);
}

void draw () {
    image(background, x, 0); //draw background twice adjacent
    image(background, x+background.width, 0);
    x -=4;
    if(x == -background.width)
        x=0; //wrap background
    defender1.render();
    defender1.keyPressed();
}

后卫Class:

class Defender {
    int x;
    int y;

    Defender(int x, int y) {
        this.x = x;
        this.y = y;
    }

    void render() {
        fill(255,0,0);
        rect(x,y,50,20);
        triangle(x+50,y,x+50,y+20,x+60,y+10);
        fill(0,0,100);
        rect(x,y-10,20,10);
    }

    void keyPressed() {
        if (key == CODED) {
            if (keyCode == UP) {
                defender1.y = y-1;
            } else if (keyCode == DOWN) {
                defender1.y = y+1;
            }
        }
    }
}

每次调用 draw() 时,您都在调用 defender1.keyPressed() 函数。

keykeyCode 变量保存最近按下的键,无论该键当前是否被按下。

要检查当前是否有任何键被按下,您可以使用 keyPressed 变量。

或者您可以将代码更改为仅从草图级 keyPressed() 函数调用 defender1.keyPressed()

您可以在 the reference 中找到更多信息。

无耻的自我推销:here 是处理用户输入的教程。