在Corona上调用触摸侦听器时如何获取对象的特定部分

时间:2013-05-28 04:15:53

标签: listener corona

我有一个呈现角色的小组。它包含头部,手臂和身体的其他部位。 我想将触摸听众设置为该组,所以当我触摸头部时,手臂和身体会做一些动作。 我不想将触摸监听器设置为只有头部,而是整个组。 我把名字设置为头,希望event.other可以工作(比如碰撞),但事实并非如此。

你有解决方案吗? 我的代码在下面

local touchListener= function( event )
        if (event.phase=="began") then
            local group = event.target
            local head= group[1]
            local arms= group[2]
            local body= group[3]

            if( event.other.name == "head" ) then

            // do something here
            end
        end
return true
end

1 个答案:

答案 0 :(得分:0)

你应该首先创建身体的特定部位。然后你应该为每个人添加触摸监听器。例如,您有名为“head”,“arms”和“body”的对象

head.id = "head"
arms.id = "arms"
body.id = "body"

head:addEventListener( "touch", touchHandler )
arms:addEventListener( "touch", touchHandler )
body:addEventListener( "touch", touchHandler )

-- Touch function here
    local function touchHandler( event )
        if event.phase == "began" then
            display.getCurrentStage():setFocus( event.target )
            event.target.isFocus = true 
        elseif event.target.isFocus then
            if event.phase == "moved" and not ( inBounds( event ) ) then
                display.getCurrentStage():setFocus( nil )
                event.target.isFocus = false
            elseif event.phase == "ended" then
                if event.id == "head" then
                  -- Do stuff for head
                elseif event.id == "arms" then
                  -- Do stuff for arms
                elseif event.id == "body" then
                  -- Do stuff for body
                end
                display.getCurrentStage():setFocus( nil )
                event.target.isFocus = false
            end
        end
        return true
    end

function inBounds( event )
    local bounds = event.target.contentBounds
    if event.x > bounds.xMin and event.x < bounds.xMax and event.y > bounds.yMin and event.y  < bounds.yMax then
        return true
    else
        return false
    end
end 

此代码还将查找对象的边界。例如,如果用户触摸屏幕然后将他/她的手指移动到对象外部,则对象将不再被聚焦。 干杯^^