2014-12-01 1 views
2

나는 탁구 게임을 만들고있다. 움직임을위한 키를 누르면 두 선 (그림 상자)을 동시에 움직일 수있었습니다. 문제는 한 플레이어에 대한 컨트롤이 눌려지고 다른 플레이어가 한 번 클릭 (1 회)하면 다른 플레이어의 움직임을 깨고 다시 키를 눌러야한다는 것입니다. 나는 keypressKeyboard.IsKeyDown으로 해결하려했지만 운이 없었습니다. 나는 당신이 당신의 게임 조각 이동하기 위해 그들을 누르고있는 동안 키를 Windows에서 반복 얻을 사실에 의존하고 생각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

+0

클릭하면 오류가 발생합니다. 버튼을 클릭했지만 여전히 이해가 안되는 이유 변수 (goup2/godown2)가 참인 경우 다른 플레이어의 움직임을 어떻게 깨뜨릴 수 있습니까? –

+0

버튼을 클릭 할 때 어떤 방법을 사용하고 있는지도 알 수 있습니다. 또한 코드의 어떤 줄을 클릭하십시오. .. 다시 한 번 코드를 통해 단계를 밟아 브레이크 포인트를보고 정확한 라인에 오류를보고해야합니다. [Enum.Parse Method] (http://msdn.microsoft .com/ko-ko/library/essfb559.aspx) – MethodMan

답변

0

:

여기 내 코드입니다. 누르고있는 첫 번째 키는 누른 상태에서 새 키가 반복되므로 반복되지 않습니다.

이 문제를 해결하려면 타이머의 Tick() 이벤트를 사용하십시오. KeyDown/KeyUp 이벤트에서 단순히 상태을 변경하여 관련된 조각이 이동해야하는지 (그리고 어떤 방향으로 가야하는지) 나타내는 변수를 변경하십시오. 타이머 코드는 상태 변수를보고 이에 따라 작동합니다.

+0

내 문제가 해결되었습니다. 감사합니다. –

관련 문제