2014-12-01 31 views
2

我在創建乒乓遊戲。如果按下移動的按鍵,我設法同時移動兩行(圖片框)。問題在於,如果按下一個玩家的控制權,然後其他玩家只需點擊(1次)就會打斷其他玩家的移動,以至於他需要再次按下按鍵。我試圖用keypressKeyboard.IsKeyDown修復它,但沒有運氣。C#按鍵打破對象的移動

這裏是我的代碼:

public void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     Keys up1 = (Keys)Enum.Parse(typeof(Keys), form1.p5_text_kontrole_gor1.Text , true); 
     Keys down1 = (Keys)Enum.Parse(typeof(Keys), form1.p5_text_kontrole_dol1.Text , true); 

     Keys up2 = (Keys)Enum.Parse(typeof(Keys), form1.p5_text_kontrole_gor2.Text, true); 
     Keys down2 = (Keys)Enum.Parse(typeof(Keys), form1.p5_text_kontrole_dol2.Text, true); 

     if (e.KeyCode == Keys.Escape) 
      Application.Exit(); 

     if(e.KeyCode == up1) 
     { 
      goup1 = true; 
     } 
     if (e.KeyCode == down1) 
     { 
      godown1 = true; 
     } 
     if (e.KeyCode == up2) 
     { 
      goup2 = true; 
     } 
     if (e.KeyCode == down2) 
     { 
      godown2 = true; 
     } 
     igra1(); 
    } 

private void Form1_KeyUp(object sender, KeyEventArgs e) 
    { 
     Keys up1 = (Keys)Enum.Parse(typeof(Keys), form1.p5_text_kontrole_gor1.Text, true); 
     Keys down1 = (Keys)Enum.Parse(typeof(Keys), form1.p5_text_kontrole_dol1.Text, true); 

     Keys up2 = (Keys)Enum.Parse(typeof(Keys), form1.p5_text_kontrole_gor2.Text, true); 
     Keys down2 = (Keys)Enum.Parse(typeof(Keys), form1.p5_text_kontrole_dol2.Text, true); 

     if (e.KeyCode == up1) 
     { 
      goup1 = false; 
     } 
     if (e.KeyCode == down1) 
     { 
      godown1 = false; 
     } 

     if (e.KeyCode == up2) 
     { 
      goup2 = false; 
     } 
     if (e.KeyCode == down2) 
     { 
      godown2 = false; 
     } 
     igra1(); 
    } 

public void igra1() 
    { 
     if (goup1) 
     { 
      if (form1.p6_ploscek1.Top > form1.panel6_pongIgra.Top) 
       form1.p6_ploscek1.Top -= 15; 
     } 
     if (goup2) 
     { 
      if (form1.p6_ploscek2.Top > form1.panel6_pongIgra.Top) 
       form1.p6_ploscek2.Top -= 15; 
     } 
     if (godown1) 
     { 
      if (form1.p6_ploscek1.Bottom < form1.panel6_pongIgra.Bottom) 
       form1.p6_ploscek1.Top += 15; 
     } 
     if (godown2) 
     { 
      if (form1.p6_ploscek2.Bottom < form1.panel6_pongIgra.Bottom) 
       form1.p6_ploscek2.Top += 15; 
     } 
    } 
+1

步驟通過代碼來查明確切問題和/或錯誤或問題發生的位置..這將是我的第一個建議 – MethodMan 2014-12-01 16:44:10

+0

當我單擊時發生錯誤按鈕,但我仍然不明白如果他的變量(goup2/godown2)爲真,它怎麼能打破其他玩家的移動 – 2014-12-01 16:56:19

+0

當你點擊什麼按鈕..你在什麼方式時,你說'點擊按鈕'也是什麼行代碼..再一次你需要步驟通過代碼,但斷點和報告的確切線,它的錯誤.. [Enum.Parse方法](http://msdn.microsoft .com/en-us/library/essfb559.aspx) – MethodMan 2014-12-01 17:00:08

回答

0

我相信你依靠事實鍵獲得由Windows反覆當您按住下來,使你的遊戲作品移動。按住的第一個鍵將停止重複,因爲按下的新鍵不會重複。

要修復此問題,請在定時器控件的Tick()事件中修復此問題。在KeyDown/KeyUp事件中,只需更改表示關聯片段是否應該移動(以及它應該走向哪個方向)的變量的狀態即可。定時器代碼將查看狀態變量並採取相應措施...

+0

解決了我的問題,謝謝 – 2014-12-01 18:08:57