我尝试在处理中创建平滑的运动,但它现在不起作用,我不确定为什么它不起作用。我是编码初学者,所以在解释时不要让我变得太复杂:)。角色现在移动得非常 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
。该类有新方法 pressed
和 released
,它们根据输入参数 left
、right
、up
和 down
改变当前移动方向(dx
、dy
)。例如:
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 。参数left
、right
、up
和down
根据按下或释放的键进行设置。例如:
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/