java - 加工过程中运动平稳

标签 java processing

我尝试在处理中创建平滑的运动,但它现在不起作用,我不确定为什么它不起作用。我是编码初学者,所以在解释时不要让我变得太复杂:)。角色现在移动得非常 block 状,我无法同时按下多个按钮,如果有人可以帮助我,那就太好了。预先感谢您。

class Player1 {
    int x = width/2;
    int y;
    float speedX = 5;
    float speedY = 5;
    int size;

    boolean up, down, left, right;

    Player1(int newX, int newY, int newSize) {
        x = newX;
        y = newY;
        size = newSize;
    }

    void run() {
        display();
        movePlayer1();
    }

    void display() {
        ellipse(x, y, size, size);
    }

    void movePlayer1() {
        if (keyPressed) {
            if (key == 'a' || key == 'A') {
                left = true;
            }
            if (key == 'd' || key == 'D') {
                right = true;
            }
            if (key == 'w' || key == 'W') {
                up = true;
            }
            if (key == 's' || key == 'S') {
                down = true;
            }

            if (key == 'a' || key == 'A') {
                x -= speedX;
            }
            if (key == 'd' || key == 'D') {
                x += speedX;
            }
            if (key == 'w' || key == 'W') {
                y -= speedY;
            }
            if (key == 's' || key == 'S') {
                y += speedY;
            }
        }
    }

    void keyReleased() {
        if (key == 'a' || key == 'A') {
            left = false;
        }
        if (key == 'd' || key == 'D') {
            right = false;
        }
        if (key == 'w' || key == 'W') {
            up = false;
        }
        if (key == 's' || key == 'S') {
            down = false;
        }
      }
}

这是主代码页

Stars stars[] = new Stars[100];
Player1 player1;
Player2 player2;


void setup() {
    size(600, 800);
    player1 = new Player1(width/2, 100, 30);
    player2 = new Player2(width/2, 700, 30);

    for (int i = 0; i < stars.length; i++) {
        stars[i] = new Stars((int)random(width), (int)random(height));
    }
}

void draw() {
    background(0); 
    stroke(255);
    strokeWeight(3);
    line(0, height/2, width, height/2);


    //draw stars
    for (int i = 0; i < stars.length; i++) {
        stars[i].run();
    }

    // draw players
    player1.run();
    player2.run();

}

最佳答案

首先,我建议分别更改类Player1 Player2。对于行为相同的对象,不要使用不同的类。请注意,唯一的区别是玩家通过不同的键移动,这不应该由不同的对象处理。
创建一个类Player。该类有新方法 pressedreleased,它们根据输入参数 leftrightupdown 改变当前移动方向(dxdy)。例如:

class Player {  
    int x, y;
    int dx = 0, dy = 0;
    float speedX = 5;
    float speedY = 5;
    int size;

    Player(int newX, int newY, int newSize) {
        x = newX;
        y = newY;
        size = newSize;
    }

    void run() {
        display();
        movePlayer();
    }

    void movePlayer() {
        x += dx * speedX;
        y += dy * speedY;
    }

    void display() {
        ellipse(x, y, size, size);
    }

    void pressed(boolean left, boolean right, boolean up, boolean down) {
        if (left)  dx = -1;
        if (right) dx =  1;
        if (up)    dy = -1;
        if (down)  dy =  1;
    }

    void released(boolean left, boolean right, boolean up, boolean down) { 
        if (left)  dx = 0;
        if (right) dx = 0;
        if (up)    dy = 0;
        if (down)  dy = 0;
    }
} 

使用键盘回调keyPressed()keyReleased()来改变球员的 Action 。参数leftrightupdown根据按下或释放的键进行设置。例如:

Player player1;
Player player2;

void setup() {
    // [...]
}

void draw() {
    // [...]
}

void keyPressed() {
    player1.pressed((key == 'a' || key == 'A'), (key == 'd' || key == 'D'),
                    (key == 'w' || key == 'W'), (key == 's' || key == 'S'));

    player2.pressed(keyCode == LEFT, keyCode == RIGHT, keyCode == UP, keyCode == DOWN);
}

void keyReleased() {
    player1.released((key == 'a' || key == 'A'), (key == 'd' || key == 'D'),
                     (key == 'w' || key == 'W'), (key == 's' || key == 'S'));

    player2.released(keyCode == LEFT, keyCode == RIGHT, keyCode == UP, keyCode == DOWN);
}

这允许您同时处理多个键的状态。

关于java - 加工过程中运动平稳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58463931/

相关文章:

java - 抑制 JDK1.4 项目的警告

java - 我可以从 Spring Boot 应用程序启动电报机器人吗?

java - 如何在 Android 中创建接受参数的 Runnable?

2D 滚动游戏的 Java nullpointerException

javascript - Javascript 中的 A*(使用 p5.js)不起作用

javascript - 在半径范围内拾取食物对象

java对象在多个线程之间共享,何时垃圾收集?

Java 处理 - 使用 text() 但窗口上没有显示任何内容

java - 普利瑟姆斯的日位置 "A Practical Analytic Model for Daylight"

python - 如何使矩形在球第一次和第二次击中时改变颜色,然后在第三次击中时使其消失?