2017-03-07 150 views
0

所以我剛開始做一些java處理,並遇到我無法獨立移動墊的問題。如何獨立移動乒乓球的墊給2名球員?

當我移動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); 

} 
+0

我認爲,我們需要看到的代碼顯示'key','keyCode'和'keyPressed'(以及其他)來自哪裏 –

+0

@SteveSmith這些內置到Processing語言中。 –

+0

Can Processing可以爲您提供有關多個併發按鍵的信息嗎? 'key'和'keyCode'有什麼區別? –

回答

0

如果你想一次接受多個輸入而不發生碰撞,使用keyPressed()keyReleased()功能。無論何時按下按鍵,這些功能都會接受您的輸入。但是,只有在您按下並釋放按鍵時纔會註冊,而不是在您按下某個按鍵時纔會註冊。爲了解決這個問題,可以設置布爾變量的上下變量,當它們爲真時,移動paddles。這使您可以隨時平穩地移動槳葉,而不會有任何問題或干擾。然後,您可以刪除檢查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; 
} 
+0

非常感謝。它似乎從我的預期工作。現在我可以同時控制它們。 – Philzen

+0

@Philzen那好吧。很高興我能幫上忙 – UnknowableIneffable