本教程主要講解一下tap、touch和multitouch的區別,以及如何處理每種方式。html
若是是新手的話,能夠先複習一下以前的文章 CoronaSDK之交互系統和事件檢測app
1 Tap檢測函數
Tap事件是用戶和觸屏之間交互最基礎的一種。本質上來講,一個tap就是表示用戶用手指接觸到屏幕,而後在差很少附近的位置再擡起的過程。這個tap事件只有在用戶在同一個點接觸和放開屏幕,才做爲tap事件成功的發生。post
在Corona裏,對於大部分display object,你能夠註冊一個tap事件監聽器來監聽tap事件:測試
local function myTapListener( event ) --code executed when the button is tapped print( "object tapped = "..tostring(event.target) ) --'event.target' is the tapped object return true end local myButton = display.newRect( 100, 100, 200, 50 ) myButton:addEventListener( "tap", myTapListener ) --add a "tap" listener to the object
來自tap事件的event參數包括下列字段:url
不像touch event,tap事件並不包括一個phase屬性 -- 這個tap就是一個單一的動做,同時包括了接觸和放開。因此你不須要以任何形式處理階段信息(phase)。spa
1.1 過濾雙擊(double tap):code
使用event.numTaps屬性,你能夠輕易肯定一個對象是否被雙擊,而且區別在這個對象上的屢次單擊。htm
爲了作到這一點,只要確保event.numTaps等於2,而且忽略其餘全部狀況(return true):對象
local function myTapListener( event ) if ( event.numTaps == 2 ) then print( "object double-tapped = "..tostring(event.target) ) else return true end end local myButton = display.newRect( 100, 100, 200, 50 ) myButton:addEventListener( "tap", myTapListener )
2 Touch檢測
Touch事件提供了更高級的屏幕交互。經過touch事件,你能夠檢測到用戶首次接觸到屏幕,以及何時放開屏幕。你也能夠跟蹤用戶手指在屏幕上的滑動軌跡。爲了完成這個目標,Corona提供了event.phase屬性的四種狀態:
在Corona裏,你能夠監聽在大多數顯示對象上註冊的touch事件監聽器:
local function myTouchListener( event ) if ( event.phase == "began" ) then --code executed when the button is touched print( "object touched = "..tostring(event.target) ) --'event.target' is the touched object elseif ( event.phase == "moved" ) then --code executed when the touch is moved over the object print( "touch location in content coordinates = "..event.x..","..event.y ) elseif ( event.phase == "ended" ) then --code executed when the touch lifts off the object print( "touch ended on object "..tostring(event.target) ) end return true --prevents touch propagation to underlying objects end local myButton = display.newRect( 100, 100, 200, 50 ) myButton:addEventListener( "touch", myTouchListener ) --add a "touch" listener to the object
這裏event的屬性包括下列字段:
3 Multitouch檢測
在應用中啓動多點觸控(multitouch)可讓檢測和處理,同時在屏幕上多處發生的用戶觸摸事件。
由於默認狀況下,multitouch是被關閉的,因此你必須經過system.activate()函數來啓動它。注意,多點觸控功能只能在實際真機上測試,而不能在Corona模擬器裏測試。
system.activate( "multitouch" )
開啓多點觸控之後,註冊到對象上的touch事件監聽器,和前面描述touch檢測同樣。而後,經過比較event.id屬性,來肯定touch事件序列中哪個觸碰被返回。
system.activate( "multitouch" ) local myRectangle = display.newRect( 0, 0, 320, 480 ) local function multitouchListener( event ) print( "Phase: "..event.phase ) print( "Location: "..event.x..","..event.y ) print( "Unique touch ID: "..tostring(event.id) ) print( "----------" ) return true end myRectangle:addEventListener( "touch", multitouchListener )