当按下“ W或w”仅一次时,使块/字符移动“ X px”,而当按住“ W and w”时,不再继续行走

时间:2019-09-23 10:27:35

标签: java processing

当我按“ W或w”但仅一次时,我想使我的矩形/字符移动“ X px's”。按住“ W and w”时,不要继续移动。我试过用按下“ W或w”时会更改的变量来制作“按键释放”功能。但是它并没有真正起作用,只是这样做了,因此Rectangle / Character一次移动了“ X px's”,之后便不再朝那个方向移动。简而言之,我希望每次“单击”按钮时,矩形/字符都移动50px,这是一步一步来的。而不是流畅的动作。谁能帮忙? 该代码是用Java处理编写的。

class Character {

float x = 0;
float y = 0;

//VV Movement VV

void move() {
    if (keyPressed) {
        if (key == 'w' || key == 'W') {
            //terms, move forward/up, Y-axel.
            y -= 50;
        }
    }
    if (keyPressed) {
        if (key == 'a' || key == 'A') {
            //terms, move right, X-axel.
            x -= 50;
        }
    }
    if (keyPressed) {
        if (key == 's' || key == 'S') {
            //terms, move backwards/down, Y-axel.
            y += 50;
        }
    }
    if (keyPressed) {
        if (key == 'd' || key == 'D') {
            //terms, move left, X-axel.
            x += 50;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

  

我想使矩形/字符移动[...],但只移动一次

添加一个keyPressed()事件并从该事件中调用move,但不要在draw()中对其进行调用。

注意keyPressed每次按键时都会调用一次。因此,当按键时,角色仅移动一次。但是由于操作系统可以处理按键重复,因此必须存储最后按下的按键。如果在keyReleased出现之前再次按下相同的键,则必须跳过该键。例如:

Character ch = new Character();
int lastKey = 0;
void keyPressed() {
    if (lastKey != key) {
        lastKey = key; 
        ch.move();
    }
}

void keyReleased() {
    lastKey = 0;
}

在示例ch中假定您是Character的实例。