2017-03-07 5 views
0

Also habe ich gerade angefangen Java zu machen und habe das Problem, dass ich die Pads nicht unabhängig voneinander bewegen kann.Wie verschiebe ich unabhängig voneinander die Pads für 2 Spieler?

Während ich pad1 verschiebe und pad2 starte, bleibt pad1 einfach stehen und umgekehrt, so dass die beiden Spieler sich gegenseitig behindern, wenn das Spiel schneller wird.

Ich versuchte einen Unterschied zu erreichen, indem ich die Pads in Objekte verwandelte, aber ich habe keine Änderungen am Problem selbst vorgenommen. Das Ende für den Code kann für jetzt ignoriert werden, weil ich denke, dass ich das mit einem forLoop beheben werde.

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

} 
+0

Ich denke, wir müssen den Code sehen, dass zeigt, wo 'key',' keyCode' und 'keyPressed' (und andere) von –

+0

@SteveSmith kommen. Diese sind in die Verarbeitungssprache integriert. –

+0

Kann die Verarbeitung Informationen über mehrere gleichzeitige Tastendrücke liefern? Und was ist der Unterschied zwischen 'key' und' keyCode'? –

Antwort

0

Wenn Sie ohne Kollision mehrere Eingänge auf einmal annehmen möchten, verwenden Sie die keyPressed() und keyReleased() Funktionen. Egal, wann Sie eine Taste drücken, diese Funktionen akzeptieren Ihre Eingabe. Diese werden jedoch nur registriert, wenn Sie eine Taste drücken und loslassen und nicht, wenn Sie eine Taste gedrückt halten. Um dies zu korrigieren, machen Sie boolesche Variablen für hoch und runter, und wenn sie wahr sind, bewegen Sie die Paddel. So können Sie die Paddles jederzeit problemlos und störungsfrei bewegen. Sie können dann die if-Anweisungen entfernen, die nach den Schlüsseln in der Schleife draw() suchen. In der Praxis sieht es wie folgt aus:

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

Dann in Ihrer draw() Schleife, in der Nähe der Spitze, diese setzen, um Ihre Paddel zu machen bewegen:

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

Vielen Dank. Es scheint von dem zu funktionieren, was ich erwartet habe. Jetzt kann ich sie gleichzeitig kontrollieren. – Philzen

+0

@Philzen na gut dann. Froh, dass ich helfen konnte – UnknowableIneffable

Verwandte Themen