2014-03-29 161 views
2

下面是一些代碼示例中,我要處理tpouch手勢:翻譯觸控手勢鼠標手勢

public void HandleInput() 
{ 
    TouchPanel.EnabledGestures = 
     GestureType.FreeDrag | GestureType.DragComplete | GestureType.DoubleTap | GestureType.Tap; 

    while (TouchPanel.IsGestureAvailable) 
    { 
     GestureSample gs = TouchPanel.ReadGesture(); 
     switch (gs.GestureType) 
     { 
      case GestureType.FreeDrag: 
       ... 
       break; 

      case GestureType.DragComplete: 
       ... 
       break; 

      case GestureType.DoubleTap:  
       ... 
       break; 

      case GestureType.Tap:      
       ... 
       break; 

... 

此使用monogame(即XNA)寫入和我遲來的意識到,我是不處理鼠標輸入目標機器(WinRT)沒有觸摸功能的情況。

到目前爲止,我已經遇到處理的鼠標手勢的唯一方法如下:

MouseState mouseState = Mouse.GetState(); 
Vector2 mousePosition = new Vector2(mouseState.X, mouseState.Y); 

if (mouseState.LeftButton == ButtonState.Pressed) 
    ... 

我可以看到,它有可能在這裏實現同樣的事情,但我想懶惰和削減一個角落(和希望產生更簡單的代碼)。所以,我的問題是雙重的:

  1. 是否可以處理鼠標「手勢」?
  2. 如果沒有,有沒有辦法說服XNA該鼠標其實是觸摸(適用於Windows 8模擬器做到這一點非常好)。

回答

0

我覺得你真的不想夫婦觸摸和鼠標手勢。如果你的遊戲使用多點觸控,那麼連接它們幾乎是不可能的。你將不得不在你的代碼中分離觸摸樣式。

但是,如果你真的堅持把它們連接起來,你可以創建自己的包裝類,它將所有的輸入轉換成你想要的並把它傳遞給你的遊戲對象。即而不是使用Mouse.GetState() - > MyGlobalInput.GetState()來評估touch或mouse是否可用。

但請記住:用戶期望觸摸輸入與鼠標輸入不同,因爲體驗非常不同,所以這意味着兩種情況都有自己的邏輯。當你想使用鼠標或觸摸使用的全局設置(或當兩個可用,讓用戶選擇?)。擁有自己的邏輯將允許您更輕鬆地構建鼠標手勢。這也是一個建築視圖/決定

編輯:另外,如果您指的是單人遊戲Microsoft.Xna.Framework.Input.Touch.GestureSample,它只需要一些vector2位置與touch2位置相同。你只需要一些智能翻譯鼠標來觸摸輸入。