在CoronaSDK中,如何处理隐藏的displayObject中的tap事件?

时间:2013-10-15 05:57:22

标签: lua corona displayobject

我在屏幕上显示一个png图像,其中包含玩家可以点按的各种等级。 我使用以下方法创建图像:

local levelsImage = display.newImage("assets/levelmap-levels.png", 0, 0, true)

然后我在每个级别的顶部重叠圆圈,如下所示( levels 是一个包含每个级别的坐标和tap半径的表格):

for i,level in ipairs(levels) do
    local levelTapCircle = display.newCircle(level.x, level.y, level.tapRadius)
    levelTapCircle.level=level -- attach the level info to the object so we know which level was tapped
    levelTapCircle.alpha=0.3
    myGroup:insert(levelTapCircle)
end

按如下方式附加点击事件处理程序

levelTapCircle:addEventListener("tap", levelTapped)

在levelTapped函数中,我只需将抽头坐标打印到输出控制台,以证明调用了事件处理程序。

如果圆圈是可见的(即当alpha> 0时),则引发事件并调用levelTapped函数。但是,如果我将alpha值更改为0以隐藏圆圈,则不会调用tap事件。

levelTapCircle.alpha=0

以下内容也可用于隐藏圈子,但也会导致未调用tap事件处理程序:

levelTapCircle.isVisible = false

我的问题是:

是否可以从隐藏的displayObjects(本例中为圆圈)接收点击事件? 如果没有,我如何从图像上的特定圆形区域接收点击事件,但没有实际显示圆圈?

2 个答案:

答案 0 :(得分:1)

如果设置alpha=0isVisible=false,则点击并触摸功能也会被禁用。

在两种方法中,您可以处理此问题,

第一个levelTapCircle:setFillColor(255,255,255,0)

levelTapCircle.alpha=0.01

答案 1 :(得分:1)

如上所述,如果alpha = 0或isVisible = false,则触摸事件将被禁用。

然而,您可以使用isHitTestable = true来阻止这种情况发生。这使您不必使用任何类型的解决方法。

object.alpha = 0
-- OR --
object.isVisible = false

-- Enable Touch/Tap Events With --
object.isHitTestable = true