Java 如何为两名选手独立移动乒乓球垫?

Java 如何为两名选手独立移动乒乓球垫?,java,processing,Java,Processing,所以我刚开始做一些java处理,遇到了一个问题,我不能独立地移动焊盘 当我移动pad1并启动pad2时,pad1只是停止,反之亦然,这样当游戏速度加快时,两个玩家就会互相干扰 我试图通过把垫子变成物体来达到不同,但我没有完成对问题本身的任何改变。代码的结尾现在可以忽略,因为我想我会用forLoop来解决这个问题 float player_1_x; float player_1_y; float player_2_x; float player_2_y; float ball_x; float b

所以我刚开始做一些java处理,遇到了一个问题,我不能独立地移动焊盘

当我移动pad1并启动pad2时,pad1只是停止,反之亦然,这样当游戏速度加快时,两个玩家就会互相干扰

我试图通过把垫子变成物体来达到不同,但我没有完成对问题本身的任何改变。代码的结尾现在可以忽略,因为我想我会用forLoop来解决这个问题

float player_1_x;
float player_1_y;
float player_2_x;
float player_2_y;
float ball_x;
float ball_y;
float ball_vector_x;
float ball_vector_y;

int round;

void setup() {
  player_1_x = 20;
  player_1_y = 60;
  player_2_x = 780;
  player_2_y = 60;
  ball_x = 400;
  ball_y = 300;
  ball_vector_x = -3;
  ball_vector_y = 0;
  round = 0;
  size(800, 600);
  rectMode(CENTER);
}

void draw() {
  background(0);
  rect(ball_x, ball_y, 10, 10);
  rect(player_2_x, player_2_y, 20, 100);
  if(keyPressed) {
    if(keyCode == DOWN && player_2_y < 550) {
      player_2_y += 5;
      }
    if(keyCode == UP && player_2_y > 50) {
      player_2_y -= 5;
      }
  }
  rect(player_1_x, player_1_y, 20, 100);
  if(keyPressed) {
    if(key == 's' && player_1_y < 550) {
      player_1_y += 5;
      }
    if(key == 'w' && player_1_y > 50) {
      player_1_y -= 5;
      }
  }
  ball_x += ball_vector_x;
  ball_y += ball_vector_y;
  if(ball_x < 30) {
    if(ball_y < (player_1_y + 55) && ball_y > (player_1_y - 55)) {
      ball_vector_x = (-ball_vector_x) + 0.5;
      ball_vector_y -= (player_1_y - ball_y) * 0.05;
    } else {
        ball_x = 400;
        ball_y = 300;
        ball_vector_x = -3;
        ball_vector_y = 0;
        round = 0;
    }
  }
  if(ball_x > 770) {
    if(ball_y < (player_2_y +55) && ball_y > (player_2_y - 55)) {
      ball_vector_x = (-ball_vector_x) - 0.5;
      ball_vector_y -= (player_2_y - ball_y) * 0.05;
    } else {
        ball_x = 400;
        ball_y = 300;
        ball_vector_x = 3;
        ball_vector_y = 0;
        round = 0;
    }
  }
  if(ball_y > 595 || ball_y < 5) {
    ball_vector_y = -ball_vector_y;
  }
  if(ball_vector_x == 4 || ball_vector_x == -4) {
    round = 1;
  } else if(ball_vector_x == 5 || ball_vector_x == -5) {
    round = 2;
  } else if(ball_vector_x == 6 || ball_vector_x == -6) {
    round = 3;
  } else if(ball_vector_x == 7 || ball_vector_x == -7) {
    round = 4;
  } else if(ball_vector_x == 8 || ball_vector_x == -8) {
    round = 5;
  } else if(ball_vector_x == 9 || ball_vector_x == -9) {
    round = 6;
  } else if(ball_vector_x == 10 || ball_vector_x == -10) {
    round = 7;
  }
  text("round: " + round, 380, 20);

}
float player_1_x;
浮球运动员;
浮球玩家_2_x;
浮球运动员2_y;
浮球;
浮球;
浮球矢量;
浮球矢量;
整数轮;
无效设置(){
玩家_1_x=20;
玩家_1_y=60;
玩家_2_x=780;
玩家_2_y=60;
球x=400;
球y=300;
球向量x=-3;
球向量y=0;
四舍五入=0;
尺寸(800600);
矩形模式(中心);
}
作废提款(){
背景(0);
rect(ball_x,ball_y,10,10);
rect(player_2_x,player_2_y,20100);
如果(按键){
if(keyCode==DOWN&&player_2_y<550){
玩家_2_y+=5;
}
如果(键码==向上和播放器>50){
玩家_2_y-=5;
}
}
rect(player_1_x,player_1_y,20100);
如果(按键){
如果(键='s'和&player_1_y<550){
玩家_1_y+=5;
}
如果(键='w'&&player_1_y>50){
玩家_1_y-=5;
}
}
ball_x+=ball_向量_x;
ball_y+=ball_向量_y;
如果(球x<30){
如果(球y<(球员y+55)和球y>(球员y-55)){
ball_向量_x=(-ball_向量_x)+0.5;
球向量y-=(球员y-球)*0.05;
}否则{
球x=400;
球y=300;
球向量x=-3;
球向量y=0;
四舍五入=0;
}
}
如果(球x>770){
如果(球y<(球员y+55)和球y>(球员y-55)){
ball_向量_x=(-ball_向量_x)-0.5;
球向量y-=(球员y-球)*0.05;
}否则{
球x=400;
球y=300;
球向量x=3;
球向量y=0;
四舍五入=0;
}
}
如果(球y>595 | |球y<5){
ball_vector_y=-ball_vector_y;
}
if(ball_vector_x==4 | | ball_vector_x==4){
轮=1;
}else if(ball_vector_x==5 | | ball_vector_x==5){
圆形=2;
}else if(ball_vector_x==6 | | ball_vector_x==6){
轮=3;
}else if(ball_vector_x==7 | | ball_vector_x==7){
轮数=4;
}else if(ball_vector_x==8 | | ball_vector_x==8){
轮=5;
}else if(ball_vector_x==9 | | ball_vector_x==9){
轮=6;
}else if(ball_vector_x==10 | | ball_vector_x==10){
轮=7;
}
文本(“圆形:+圆形,380,20);
}

如果要同时接受多个输入而不发生冲突,请使用
keyPressed()
keyreased()
功能。无论您何时按键,这些功能都将接受您的输入。但是,这些功能仅在按下和释放键时注册,而不是在按住键时注册。若要更正此问题,请为“向上”和“向下”创建布尔变量,当它们为真时,移动挡板。这使您可以在任何时候平稳地移动拨杆,而不会出现任何问题或干扰。然后可以删除检查
draw()
循环中键的if语句。实际上,它看起来是这样的:

boolean player_1_down;//Initialize all of these to false in setup.
boolean player_1_up;
boolean player_2_down;
boolean player_2_up ;

....


void keyPressed(){
   if(key == 's') {
      player_1_down = true;
   }
   if(key == 'w' ) {
     player_1_up = true;
   }
   if(keyCode == DOWN ) {
      player_2_down = true;
   }
   if(keyCode == UP ) {
      player_2_up = true;
   }
}

void keyReleased(){
   if(key == 's' ) {
      player_1_down = false;
   }
   if(key == 'w') {
     player_1_up = false;
   }
   if(keyCode == DOWN ) {
      player_2_down = false;
   }
   if(keyCode == UP) {
      player_2_up = false;
   }
}
然后,在你的
draw()
循环中,靠近顶部,放上这个,让你的桨移动:

if(player_1_down && player_1_y < 550){
    player_1_y += 5;
}else if(player_1_up && player_1_y > 50){
    player_1_y -= 5;
}
if(player_2_down && player_2_y < 550){
    player_2_y += 5;
}else if(player_2_up&& player_2_y > 50){
    player_2_y -= 5;
}
if(player_1_down&&player_1_y<550){
玩家_1_y+=5;
}如果出现其他情况(玩家1向上和玩家1 y>50){
玩家_1_y-=5;
}
如果(玩家2向下&&玩家2 y<550){
玩家_2_y+=5;
}否则如果(玩家2向上和玩家2 y>50){
玩家_2_y-=5;
}

我认为我们需要查看显示
键按下
(以及任何其他)的代码from@SteveSmith这些是内置于处理语言中的。处理能否为您提供有关多个并发按键的信息?
key
keyCode
之间的区别是什么?@SteveSmith key是键盘上的一个实际键,您可以将其拼写为字符或数字,而keyCode定义了箭头键、回车键和空格键。请参阅“处理多个按键”部分。非常感谢。这似乎和我预期的不一样。现在我可以同时控制它们了。