[XNA] 在XNA Desktop程式中接收觸控事件(Touch Event)

[XNA] 在XNA Desktop程式中接收觸控事件(Touch Event)

前言

 


首先來個導讀,

http://blogs.msdn.com/b/shawnhar/archive/2010/09/09/touch-input-on-windows-in-xna-game-studio-4-0.aspx

這篇文章描述了目前XNA4.0中的觸控事件現狀,在Windows Desktop的專案中,

無法直接引用using Microsoft.Xna.Framework.Input.Touch;

就算我們手動加入參考,TouchPanel也永遠都只會取到一個空集合,

文章內解說了這只是為了讓整個套件維持結構而已,

他們來不及在XNA4.0 Desktop中做完觸控支援,與其保持半吊子的狀態,最後決定整個砍掉。

所以在源生專案中要使用Touch是無法了。

但也不是完全絕望,文章也提到了,如果不管怎麼樣還是要在Desktop專案中接觸控的話,

還是有幾招比較土炮的,以下就介紹比較簡單的做法

 

 

環境

 


首先來到

http://archive.msdn.microsoft.com/WindowsTouch/Release/ProjectReleases.aspx?ReleaseId=2127

選擇下載第四個 Windows 7 Multitouch .NET Interop Sample Library

如果是Visual Studio 2012的話,一定會有專案移轉要按,

但是按半天專案應該還是跑不起來,但code本身是可行的,單純把cs移到自已開的專案是可以運作的,

好我知道大家一定都不想仔細研究到底那些code在幹嘛,我就直接講重點會用到哪些cs

 

還是做個簡單解說,這是Windows 7時微軟提供的觸控API,

是針對WinForm和WPF專案的code,所以其實原本跟XNA沒什麼關係,

但是沒關係,上一篇已經提到如何把XNA運行在WinForm上,所以就可以拿來用啦

(所以看到這邊的朋友,如果還不知道怎麼把XNA運行在WinForm上,請快去上一篇文下載專案唷)

 

 

如何使用

 


把上圖紅線框的cs轉貼到XNAinForm專案中,如下圖所示

沒有報錯的話,應該就表示成功了,

如果跑出奇怪的錯誤,就試試看用手動複製貼上內文的方式,而不要直接複製cs檔

 

接著回到MainForm.cs裡,修改並加入以下程式碼

 


private readonly TouchHandler _touchHandler;
public MainForm()
{
    InitializeComponent();
    _touchHandler = Factory.CreateHandler<TouchHandler>(XNApanel)
    _touchHandler.TouchDown += OnTouchDownHandler;
    _touchHandler.TouchMove += OnTouchMoveHandler;
    _touchHandler.TouchUp += OnTouchUpHandler;
}
private void OnTouchDownHandler(object sender, TouchEventArgs e)
{ 
}
private void OnTouchMoveHandler(object sender, TouchEventArgs e)
{ 
}
private void OnTouchUpHandler(object sender, TouchEventArgs e)
{ 
}

 

當然會需要引用剛才所加入的cs檔,所以在標頭加入以下using

using Windows7.Multitouch;
using Windows7.Multitouch.WinForms;

 

也就是增加一個Touch Event捕捉Handler,

並且在MainForm建構式裡註冊事件,接下來就能在TouchDown TouchUp TouchMove三個事件裡處理觸控了

 

 

祝大家開發XNA Desktop Touch程式愉快!