2014-06-10 44 views
-1

我有一個小問題,我想閱讀c#中的鍵輸入,鍵A和D工作,但Z,空間和C不?繼承人我的代碼:Windows窗體自定義控件按鍵事件不能正常工作

private async void RaceSelection_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (movable == true) 
     { 
      if (e.KeyCode == Keys.A) 
      { 
       Character.Left -= 3; 
       playerpos = Character.Location; 
      } 
      if (e.KeyCode == Keys.D) 
      { 
       Character.Left += 3; 
       playerpos = Character.Location; 
       if (Character.Bounds.IntersectsWith(pictureBox6.Bounds)) 
       { 
        if (Character.Bounds.IntersectsWith(pictureBox4.Bounds)) 
        { 
         pictureBox4.Location = new Point(999999, 9999999); 
         Character.Top += 9; 
         await Task.Delay(100); 
         Character.Top += 9; 
         await Task.Delay(100); 
         Character.Top += 9; 
         await Task.Delay(100); 
         Character.Top += 9; 
         await Task.Delay(100); 
         Character.Top += 9; 
         await Task.Delay(100); 
         Character.Top += 9; 
         await Task.Delay(100); 
         Character.Top += 5; 
         this.Controls.Clear(); 
         this.Controls.Add(GapFiller1); 

         dungeonone(); 

        } 
       } 
       if (e.KeyCode == Keys.Space) 
       { 
        Character.Top -= 25; 
        await Task.Delay(125); 
        Character.Top += 25; 
       } 
       if (e.KeyCode == Keys.C) 
       { 
        if (Character.Bounds.IntersectsWith(pictureBox5.Bounds)) 
        { 
         TownOne(); 
        } 
       } 

       if (e.KeyCode == Keys.Z) 
       { 
        if (Character.Bounds.IntersectsWith(pictureBox6.Bounds)) 
        { 

         if (EntityVar.DraugarHealth == 1) 
         { 
          Engine.EntityVar.Draugartakesdamage = false; 

          this.Controls.Remove(pictureBox6); 
          LastKill = "Draugar"; 
          label3.Text = "Well Done! but what is that ladder over there???"; 
         } 
         else 
         { 
          Engine.EntityVar.DraugarHealth -= 1; 
          if (Engine.EntityVar.Draugartakesdamage == true) 
          { 
           this.Controls.Add(HitMarker); 
           HitMarker.BringToFront(); 
           await Task.Delay(250); 
           this.Controls.Remove(HitMarker); 
          } 

         } 

        } 
       } 
      } 
     } 
    } 

任何人都知道我在做什麼錯???順便說一下,我正在製作一款遊戲,我非常清楚,即使不是最好的方式,但是我知道如何做到這一點:D,無論如何,如果你知道爲什麼它不起作用,我會非常樂意。

+0

你怎麼確定它不起作用?你能描述一下你的測試嗎? – quantdev

回答

1

問題似乎是你簡單地將你的代碼括起來是錯誤的。在你給定的代碼中,Z,C和Space鍵處理程序實際上是裏的 D處理程序。我假設你不希望這個邏輯存在,所以把它們移到D處理程序之外,它會解決你的問題。

另外,使用開關或其他如果塊爲此:)

+0

感謝您的幫助,完美的工作:) – user3349095