2012-10-21 25 views
0

我有兩個類。屏幕和按鈕。避免在屏幕轉換過程中按下多個按鈕XNA WP7

我遊戲的所有不同屏幕都繼承了Screen類。

然後按鈕被添加到屏幕類,並在屏幕的更新功能中更新(按鈕的更新功能)。

這裏是我的Button的更新代碼。

foreach (TouchLocation touch in TouchPanel.GetState()) 
     { 
      if (touch.State == TouchLocationState.Pressed) 
      { 
       Point point = new Point((int)touch.Position.X, (int)touch.Position.Y); 
       if (rectangle.Contains(point)) 
       { 
        pressed = true; 
        color = Color.Red; 
       } 
       else 
       { 
        pressed = false; 
        color = Color.White; 
       } 
       break; 
      } 
     } 

現在是問題所在。

  1. 如果我把線 如果(touch.State == TouchLocationState.Pressed) 那麼只有第一個按鈕可以點擊。我也嘗試使用TryGetPreviousLocation(),導致沒有按鈕被點擊。

  2. 如果我刪除上面提到的if語句,那麼代碼適用於所有按鈕,但在屏幕轉換期間會出現多個按鈕按下。

我的意思是說這個。假設我有兩個屏幕A和B.屏幕A和B分別在完全相同的位置上有兩個按鈕P和Q.在第二種情況下, 如果按下P按鈕,則屏幕切換到B並且按鈕Q也被按下,而手指未被擡起。

這發生得非常快,因此無法控制它。我想知道如何在屏幕轉換期間只允許一次印刷。如果不擡起手指並再次觸摸屏幕,播放器應該無法按下下一個屏幕上的按鈕。

如前所述。我正在調用當前屏幕更新方法中所有按鈕的更新方法。

+0

也許你可以嘗試檢測'TouchLocationState.Released'而不是'TouchLocationState.Pressed'? –

回答

4

TouchLocationState.pressed替換爲TouchLocationState.Moved。這個對我有用。

foreach (TouchLocation touch in touches) 
    { 
     if (touch.State == TouchLocationState.Moved) 
     { 

      if (leftRectangle.Contains((int)touch.Position.X, (int)touch.Position.Y)) 
      { 
       spriteMove.X -= 5; 
      } 

      if (upRectangle.Contains((int)touch.Position.X, (int)touch.Position.Y)) 
      { 
       spriteMove.Y -= 5; 
      } 

      if (rightRectangle.Contains((int)touch.Position.X, (int)touch.Position.Y)) 
      { 
       spriteMove.X += 5; 
      } 

      if (downRectangle.Contains((int)touch.Position.X, (int)touch.Position.Y)) 
      { 
       spriteMove.Y += 5; 
      } 
     } 
    }