日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows Phone 7范例游戏Platformer实战5——多点触控编程

發(fā)布時間:2025/5/22 windows 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows Phone 7范例游戏Platformer实战5——多点触控编程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

即使是再有經(jīng)驗的XNA程序員,在開始Windows Phone 7上的游戲開發(fā)時也不得不學(xué)習(xí)下多點觸控這個新的實現(xiàn)方法。雖然目前有些Windows Phone 7手機附帶了鍵盤,但是為了對所有WP7手機兼容,我們的游戲最好能全部采用多點觸控這種輸入方法。

?

目前在Windows Phone 7平臺上的熱銷游戲包括“刺客信條”、“極品飛車”、“巴比倫兄弟”都是采用觸控和加速度傳感器的操作方式。這對于Windows平臺的程序員來說可謂是一個全新的模式。

?

??????????????????????????????????? 刺客信條使用多點觸控實現(xiàn)英雄的移動、攻擊和武器切換


Windows Phone 7采用最少支持4個觸點的電容屏,它不再是以前仿真手筆和識別手寫筆那么簡單,如何處理多點觸控成為開發(fā)人員的新挑戰(zhàn)。在XNA編程中,多點觸控輸入會在XNA的Update()方法中被偵測,Update()方法的一個主要目的就是處理多點觸控的輸入,并將輸入導(dǎo)致的更改用Draw()方法繪制在屏幕上。


XNA中的底層多點觸控輸入處理

?

在XNA中,多點觸控設(shè)備被抽象為一個觸控面板(Touch Panel),你可以使用TouchPanel這個靜態(tài)類中的方法來獲得觸點的信息。盡管多點觸控還存在滑動等手勢的識別,但是我們還是從最底層的觸控輸入的處理開始學(xué)起。

?

我們可以用TouchPanel.GetCapabilities()這個方法來獲取觸摸屏的一些特性,這個方法返回的TouchPanelCapabilities對象包含兩個屬性。分別如下:

?

IsConnected:查看是否和觸摸屏設(shè)備進行連接。因為WP7手機總是存在觸摸屏的,所以該屬性總是返回true。

MaximumTouchCount:該屬性返回WP7手機電容屏支持的最大觸點個數(shù),對于Windows Phone 7來說這個屬性最小值為4,也就是同時支持最少4個觸點。

?

一般說來,我們只需要使用TouchPanel中的兩個靜態(tài)方法。為了獲取底層的觸控輸入信息,你可以在Update()方法中使用如下的方法:

?

TouchCollection?touchLocations?=?TouchPanel.GetState();

?

TouchPanel.GetState()方法返回的是一個觸點集合,該集合包含0個或者多個TouchLocation對象。TouchLocation對象包含三個重要屬性:

?

State:該屬性是TouchLocation的枚舉成員,包含Pressed、Moved和Released三種狀態(tài)。分別對應(yīng)觸點當前是否按下、移動和釋放。
Position:該屬性是一個Vector2是矢量坐標,用于確認當前觸點相對于左上角的坐標位置。

Id:該屬性是一個Int的整型數(shù)字,用于標示每個由按下到釋放狀態(tài)的手指

?

如果觸摸屏上沒有任何的手指按下,那么TouchCollection為空。一旦有某個手指和觸摸屏接觸,TouchCollection將包含一個State屬性為Pressed的TouchLocation對象。

?

在下一次TouchPanel.GetState()方法調(diào)用中,即使你的手指沒有移動,TouchLocation的State屬性也將更改為Moved。一旦你的手指離開觸摸屏,TouchLocation的State屬性毋庸置疑,狀態(tài)為Released了。在接下來的TouchPanel.GetState()方法調(diào)用中,TouchCollection又將為空。

?

這里也有個特例,就是當你在1/30秒的時間內(nèi),完成手指在觸摸屏上由按下到釋放的過程,那么TouchLocation的State屬性將會由Pressed直接變更為Released,跳過了Moved這個過程。估計沒幾個人手指可以在觸摸屏上如此神速,1/30秒呢?嘿嘿,要不你試試。

?

一般來說,我們可能會使用多個手指在WP7電容屏上實現(xiàn)各種操作,每個手指都可以獨立地實現(xiàn)按下、移動和釋放的過程。

?

如何對多個手指進行標示以便實現(xiàn)相應(yīng)狀態(tài)的跟蹤,這里就需要使用前面提及的TouchLocation.Id屬性了。每個觸控屏上的手指都將用一個特定的Id進行標示,以便確認是那個手指的Pressed、Moved和Released狀態(tài)。

?

TouchLocation還存在一個非常有用的TryGetPreviousLocation()方法,調(diào)用代碼:

?

TouchLocation?previousTouchLocation;
bool?success?=?touchLocation.TryGetPreviousLocation(out?previousTouchLocation);

?

我們可以在touchLocation.State等于Moved時調(diào)用該方法,這樣你可以獲取先前的觸點位置,并計算手指移動的距離。如果touchLocation.State等于Pressed,TryGetPreviousLocation()方法將返回false,而previousTouchLocation.State的值將為TouchLocationState.Invalid。


到目前為止,我們大致了解了WP7上多點觸控的實現(xiàn)和編程方法,在Platformer游戲中,英雄的移動和跳躍分別是由加速度傳感器和觸摸屏控制的。點擊手機屏幕,英雄將會跳躍,而左右傾斜手機,加速度傳感器就會判定英雄是向左還是向右移動。

?

下面就是Platformer游戲中多點觸控的封裝方法,具體的使用軒轅將在后續(xù)文章的游戲場景繪制中重點介紹。代碼依然是一如既往的短小精悍:

?

?1?????///?<summary>
?2?????///?對TouchCollection的擴展
?3?????///?</summary>
?4?????public?static?class?TouchCollectionExtensions
?5?????{
?6?????????///?<summary>
?7?????????///?確定觸摸屏是否存在觸點
?8?????????///?</summary>
?9?????????///?<param?name="touchState">當前TouchCollection集合</param>
10?????????///?<returns>如果存在觸點狀態(tài)為Pressed或Moved,返回true,反之為false</returns>
11?????????public?static?bool?AnyTouch(this?TouchCollection?touchState)
12?????????{
13?????????????foreach?(TouchLocation?location?in?touchState)
14?????????????{
15?????????????????if?(location.State?==?TouchLocationState.Pressed?||?location.State?==?TouchLocationState.Moved)
16?????????????????{
17?????????????????????return?true;
18?????????????????}
19?????????????}
20?????????????return?false;
21?????????}
22?????}

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/imobiler/archive/2010/12/10/1901850.html

總結(jié)

以上是生活随笔為你收集整理的Windows Phone 7范例游戏Platformer实战5——多点触控编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。