在Corona中检测物体触摸

在一个类中,我有两个“按钮”,它们调用两个类,如下所示:

`` ` btn1 = display.newImage(“1.png”) btn2 = display.newImage(“2.png”) btn1:addEventListener(“touch”,onSceneTouch) btn2:addEventListener(“touch”,onSceneTouch2)

`` `

这个问题在于两种方法(onSceneTouch,onSceneTouch2)做相同的事情。唯一的区别是它根据触摸哪个按钮设置一个标志。我的方法看起来像这样:

`` ` function onSceneTouch(event) //在这里做一些事情 end

`` `

我尝试搜索并找到[这篇文章](http://www.coronalabs.com/blog/2012/07/24/detecting-object-and-screen-taps/)并尝试遵循它。我向按钮添加了一个id,并在我的方法中调用了它们,但id为nil。如果我尝试为按钮设置一个名称,如:btn1.name =“name”,并在我的方法中调用self.name,但当然,名称返回“touch”。如何告诉我的方法按下了哪个按钮?

点赞
用户1847592
用户1847592

根据你提供的文章,你的代码应该如下所示:

function onSceneTouch(self, event)
  local button_id = self.id
  -- 这里做一些事情
end

-- 创建两个按钮
btn1 = display.newImage("1.png")
btn2 = display.newImage("2.png")

-- 给按钮添加 id 属性
btn1.id = 'Button1'
btn2.id = 'Button2'

-- 给按钮添加 touch 事件监听函数
btn1.touch = onSceneTouch
btn2.touch = onSceneTouch
btn1:addEventListener("touch", btn1)
btn2:addEventListener("touch", btn2)

它没有工作吗?

2013-03-14 05:38:12
用户1870706
用户1870706

我知道答案1的示例应该完全可行,但它比使用函数侦听器而不是表格侦听器多了一些工作。我会这样写:

function onSceneTouch(event)
    local target = event.target  -- 这是实际被触摸的按钮。
    if event.phase == "ended" then
         -- 在这里完成你的工作
         print(target.id) -- 打印“Button1”或“Button2”
    end
    return true -- 重要!
end

btn1 = display.newImage("1.png")
btn2 = display.newImage("2.png")
btn1.id = 'Button1'
btn2.id = 'Button2'
btn1:addEventListener("touch", onSceneTouch)
btn2:addEventListener("touch", onSceneTouch)

同一件事,不同的方式。

2013-03-18 01:58:28
用户1218135
用户1218135
将下面翻译成中文并且保留原本的 markdown 格式, `enter code here` 

## 使用单个事件侦听器,并使用唯一名称标识调用者

例如:

```lua
function onSceneTouch(event)
    local objectName = event.target.name
    if objectName == 1 then
        flag1 = true
    else
        flag2 = true
    end
end

btn1 = display.newImage("1.png")
btn1.name = 1

btn2 = display.newImage("2.png")
btn1.name = 2

btn1:addEventListener("touch", onSceneTouch)
btn2:addEventListener("touch", onSceneTouch)
2013-12-18 13:53:00