2013-08-11 3 views
1

им работать с Windows Phone игры с использованием XNA ... и ищет способ, чтобы сделать мой объект двигаться с проведением какой-то прямоугольник, который я сделал в виде кнопки на экране ....XNA для перемещения объекта

я уже пробовал это, но он просто прочитал только жест жесткинга

  foreach (GestureSample gestureSample in input.Gestures) 
       { 
        switch (gestureSample.GestureType) 
        { 
         case GestureType.Hold: 
         case GestureType.Tap: 
         Point tapLocation = new Point((int)gestureSample.Position.X, (int)gestureSample.Position.Y); 
         if (rightRectangle.Contains(tapLocation)) 
           { 
             rightTouched = true; 
             player.Catapult.CurrentState = CatapultState.MoveRight; 
             playerPositionUpdate.X += 20; 
             player.catapultPosition.X += 20; 
             player.Catapult.catapultPosition.X += 20; 
             player.Catapult.projectilePositionUpdate.X += 20; 
             if (player.Catapult.catapultPosition.X == player.Catapult.catapultPosition.X + 20) 
              rightTouched = false; 
             CenterOnPosition(player.Catapult.Position - catapultCenterOffset); 
            } 
         break; 
         } 
       } 

ответ

1

Как уже упоминалось выше, вы не должны использовать GestureSample для этой цели, поскольку использование dragcomplete и freedrag немного сложно. Вместо этого вы должны кодировать свои собственные жесты, используя TouchPanel.GetState()

TouchCollection touchCollection = TouchPanel.GetState(); 
     if (touchCollection.Count == 1) 
     { 
      var touch = touchCollection[0]; 
      switch (touch.State) 
      { 
       case TouchLocationState.Pressed: 
        if (rectangle.Contains((int) touch.Position.X, (int) touch.Position.Y)) 
        { 
         isMoving = true; 
        } 
        break; 
       case TouchLocationState.Moved: 
        if (isMoving) 
        { 
         TouchLocation prevLocation; 
         touch.TryGetPreviousLocation(out prevLocation); 
         if (prevLocation.Position != touch.Position) 
         { 
          Vector2 delta = touch.Position - prevLocation.Position; 
          //offset your rectangle on delta 
         } 
        } 
        break; 
       case TouchLocationState.Released: 
        isMoving = false; 
        break; 
      } 
     } 
     else if (touchCollection.Count == 2) 
     { 
      var touchOne = touchCollection[0]; 
      var touchTwo = touchCollection[1]; 
      //pinch logic here 
     }  

Я думаю, вы понимаете идею.

2

Жесты - это отдельные события. Вы хотите опросить состояние сенсорной панели в каждом кадре. Используйте для этого TouchPanel.GetState().

См. Working with Touch Input (Windows Phone) для информации.

+0

hmmm это не работает, я попытался использовать как ссылку в коде .. хм, правильно ли, если я использую эту строку кода, чтобы получить позицию моего касания? «Point touchPoint = new Point ((int) tl.Position.X, (int) tl.Position.Y);" и используя «if (rightRectangle.Contains (touchPoint))»? ой и я забыл упомянуть, у меня также есть freedrag, dragcomplete, flick, жест щепотки в моем коде .... я думаю, что это что-то делать ... потому что, когда я пытался держаться на экране и двигать пальцем, это выглядит Истина freedrag запускается (моя камера следит за моим пальцем) –

+0

Затем просто отключите распознавание жестов и посмотрите, связано ли это с этим. –

Смежные вопросы