如何为2名球员独立移动乒乓球垫?

时间:2017-03-07 11:34:15

标签: 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 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);

}

1 个答案:

答案 0 :(得分:0)

如果您希望一次接受多个输入而不发生冲突,请使用DirectorySlash off keyPressed()功能。无论何时按下某个键,这些功能都会接受您的输入。但是,这些仅在您按下并释放按键时注册,而不是在按住按键时注册。要纠正这个问题,请将boolean变量设置为up和down,当它们为true时,移动paddles。这使您可以随时平稳地移动拨片,没有任何问题或干扰。然后,您可以删除检查keyReleased()循环中的键的if语句。在实践中,它看起来像这样:

draw()

然后,在你的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()