Multiple Touches
이 함수를 multiple display object들에 의해 사용되도록 하는 방법은 그렇게 어렵지 않습니다. setFocus 로 catch 해서 각 display object별로 한개의 touch 에 대해 listen 하도록 할 수 있습니다. 즉 하나의 touch 가 하나의 object 에 할당 되면 다른 touch 들은 그 object 에서는 무시되는 거죠. 이렇게 각 object 별로 각 touch 들을 할당해 놓으면 멀티터치 기능이 구현 가능합니다.
multitouch 를 구현하기 위해 이전 글에서 만들었던 코드를 수정할 겁니다.
sample2.lua
system.activate("multitouch") -- turn on multitouch
-- creates an object to be moved
local function newDragObj( x, y )
local circle = display.newCircle( x, y, 50 ) -- create a user interface object
circle.alpha = 0.5 -- make it less imposing
-- standard multitouch event listener
function circle:touch(e)
local target = e.target -- get the object which received the touch event
-- handle each phase of the touch event life cycle...
if (e.phase == "began") then
display.getCurrentStage():setFocus(target, e.id) -- set touch focus on this object
target.hasFocus = true -- remember that this object has the focus
return true -- indicate the event was handled
elseif (target.hasFocus) then -- this object is handling touches
if (e.phase == "moved") then
target.x, target.y = e.x, e.y -- move the display object with the touch
else -- "ended" and "cancelled" phases
display.getCurrentStage():setFocus(target, nil) -- remove touch focus
target.hasFocus = false -- this object no longer has the focus
end
return true -- indicate that we handled the touch and not to propagate it
end
return false -- if target is not responsible for this touch event return false
end
circle:addEventListener("touch") -- listen for touches starting on the touch layer
return circle -- return the object for use
end
local group = display.newGroup() -- create layer for the draggable objects
-- create 5 draggable objects
for i=1, 5 do
local circle = newDragObj( 100, i*100 )
group:insert( circle ) -- add it to the control layer
end
이 코드가 이전 코드와 다른점들을 살펴 보죠.
- multitouch 를 activate 했습니다.
- display object 생성을 wrap 했습니다. 그래서 display object 가 반복적으로 call 될 수 있게 됐습니다.
- setFocus 가 특정 touch ID 를 받아서 유저가 화면에 하는 여러 touch 들을 구분할 수 있도록 했습니다.
- When ending the touch, setFocus accepts nil to release the object’s touch input.
- touch가 끝나면 setFocus 는 nil 을 받아서 해당 object가 그 touch input 받는 일을 release 시켜 줍니다.
위
의 코드를 실행하면 5개의 큰 원을 생성하게 됩니다. 그 각 원들은 따로따로 움직일수가 있죠. setFocus 가 display
object에 특정 Touch ID를 연결시켜주기 때문에 그 object는 다른 touch 들은 무시하게 됩니다. 이 로직으로 각
원들은 각각 다른 touch들이 할당 되서 multitouch로 따로따로 움직일 수 있게 되는 거죠.
|
|
|
'Corona SDK > Corona Doc' 카테고리의 다른 글
Pinch Zoom Rotate 구현하기 - 7/11 - (0) | 2013.02.12 |
---|---|
Pinch Zoom Rotate 구현하기 - 6/11 - (0) | 2013.02.12 |
Pinch Zoom Rotate 구현하기 - 5/11 - (0) | 2013.02.09 |
Pinch Zoom Rotate 구현하기 - 4/11 - (0) | 2013.02.01 |
Pinch Zoom Rotate 구현하기 - 3/11 - (0) | 2013.01.29 |
Pinch Zoom Rotate 구현하기 - 1/11 - (0) | 2013.01.26 |
코로나에서 time, date 다루기 (0) | 2013.01.18 |
Multi-Element Physics Body 다루기 (0) | 2013.01.11 |
내 앱에 애플의 iAds 광고 달기 (0) | 2013.01.03 |
코로나의 Holiday Gifts : Android Push Notification 등 등 (0) | 2012.12.30 |