java - 当 "X px"仅被按下一次时使 block /角色移动 "W or w",并且当 "W and w"被按住时不继续行走

标签 java processing

当我按“W 或 w”但仅一次时,我想让我的矩形/字符移动“X px”。按住“W”和“w”时不继续移动。我尝试使用一个变量创建一个“Key Released”函数,该变量在按下“W 或 w”时会发生变化。但它并没有真正起作用,它只是使矩形/字符移动了“X px”一次,然后就不再朝那个方向移动了。简而言之,我希望每次“单击”按钮时矩形/字符都会移动 50px,有点像一步一步。而且不是流畅的运动。有谁可以帮忙吗? 代码是用Java、Processing编写的。

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;
        }
    }
}

最佳答案

I want to make my Rectangle/Character move [...] but only once

添加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 实例。

关于java - 当 "X px"仅被按下一次时使 block /角色移动 "W or w",并且当 "W and w"被按住时不继续行走,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58060393/

相关文章:

java - 标签taskdef找不到 'org.jvnet.jaxb2_commons.xjc.XJC2Task'类

java - 质数和孪生代码出现奇怪的错误?

java - 我的 recyclerview 有一个适配器为空

java - 加工中的打地鼠

java - 处理(多线程)socket 服务器 new serverSocket

java - 如何创建一个字符串数组而不在开始时指定其长度?

java - 修复包含计数器的 while 循环

java - PowerMockito 模拟单个静态方法并返回对象

java - 碰撞器(java处理)

processing - 如何在HTML页面中进行处理?