2012-06-28 2 views
1

xna 게임을 만들려고합니다. 사용자가 막대를 아래로 내려 가기 위해 탭해야합니다. 시뮬레이션은 WWE PS3/Xbox 게임에서 볼 수있는 것처럼 포기 표시 줄입니다.wp7 xna touch. 사용자가 길게 누르기를 원합니다.

어쨌든, 내가 한 방법은 목적을 수행합니다. 그러나 사용자가 터치를 계속 누르고 있으면 터치 값이 계속 증가합니다.

내가 원하는 것은 사용자가 탭하면 1 점만 채점됩니다. 그리고 그가 다시 도청하면, 그는 1 점을 더 얻을 것입니다. 현재 일어나고있는 일은 사용자가 키를 계속 누르고 있으면 키보드 에서처럼 계속 증가합니다 (버튼을 누르고 있으면 키를 계속 누르고 있음).

  foreach (TouchLocation location in TouchPanel.GetState()) 
      { 

       if (location.State == TouchLocationState.Moved) 
       { 
        touchPoints++; 
        break; 
       } 
      } 

답변

3

TouchLocationState.Moved에서 TouchLocationState.Pressed로 변경하십시오. 이는 새로운 터치가있을 때마다 발생해야합니다. 당신이 키보드 입력을하고 플레이어가 공간을 누른 경우 무시하지만, 값을 증가하기 위해 키보드를 누를 때마다 원하는하는 경우

 foreach (TouchLocation location in TouchPanel.GetState()) 
     { 
      TouchLocation prevLocation; 
      bool prevLocationAvailable = location.TryGetPreviousLocation(out prevLocation); 

      if (location.State == TouchLocationState.Pressed && prevLocation.State != TouchLocationState.Pressed) 
      { 
       touchPoints++; 
       break; 
      } 
     } 

그리고 미래에 대한

, 당신은 단지 이전을 저장해야 키보드의 상태. 그런 다음 현재 키보드 상태가 키가 눌러지고 이전 키보드 상태가 키가 눌러지지 않았 으면 비교합니다.

KeyboardState currentKeyboardState = Keyboard.GetState(); 
if (currentKeyboardState.IsKeyDown(Keys.Space) && !previousKeyboardState.IsKeyDown(Keys.Space) { 
    //Do whatever it is you want to do with the press of the space key 
} 
previousKeyboardState = currentKeyboardState; 
+0

나는 touchlocation.Pressed()를 시도했는데 어떤 이유로 키 누름을 등록하지 않았습니다. spritefont를 디버거로 사용했습니다. 다른 주와 함께 작동합니다 (예 : 출시 됨. 키보드 예를 들어 주셔서 감사합니다.이 비유를 사용하여 내 문제를 설명했습니다. 터치 기반의 previousKeyboardState와 같은 것이 있습니까? – HungryCoder

+0

그래, 나는 이전 상태를 검사하는 것을 포함하도록 코드를 업데이트했다. 네가 찾고있는 것보다 더 많을거야. –

+0

고마워요! – HungryCoder

0

이 난은 개별 값으로 각 터치를 가지고 어떻게 내 코드의 조각입니다

는 (아래의 일부 코드 문제가있을 수 있도록 컴파일러 실제로 코드를하지 않았다). system.diagnostics 줄은 출력 상자에 표시 할 테스트입니다.

TouchCollection touch = TouchPanel.GetState(); 

foreach (TouchLocation touchLocation in touch) 
{ 
    if (touchLocation.State == TouchLocationState.Pressed) 
    { 
     base.InputPointX = touchLocation.Position.X; 
     base.InputPointY = touchLocation.Position.Y; 

     System.Diagnostics.Debug.WriteLine("X: " + base.InputPointX + \ 
      ", Y: " + base.InputPointY); 
     base.Update(); 
     return true; 
    } 
} 
관련 문제