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

我正在屏幕上展示一个包含各种等级的单个 png 图像,玩家可以在其上点击。

我使用以下代码创建该图像:

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

然后我在每个等级的上方叠加圆圈,如下所示(levels 是一个包含每个等级的坐标和点击半径的表):

for i,level in ipairs(levels) do
    local levelTapCircle = display.newCircle(level.x, level.y, level.tapRadius)
    levelTapCircle.level=level -- 将等级信息附加到对象上,以便我们知道点击了哪个等级
    levelTapCircle.alpha=0.3
    myGroup:insert(levelTapCircle)
end

将点击事件处理程序附加如下:

levelTapCircle:addEventListener("tap", levelTapped)

levelTapped 函数中,我只是将点击坐标打印到输出控制台中,以证明事件处理程序被调用。

如果圆圈可见(即当 alpha>0 时),则会触发事件并调用 levelTapped 函数。然而,如果我将 alpha 值更改为 0 以隐藏圆圈,则不会调用点击事件。

levelTapCircle.alpha=0

以下内容也可用于隐藏圆圈,但同时会导致不会调用点击事件处理程序:

levelTapCircle.isVisible = false

我的问题是:

是否可以从隐藏的 displayObjects(在这种情况下为圆圈)中接收点击事件?

如果不行,我如何从图像的特定圆形区域接收点击事件,但不实际显示圆圈呢?

点赞
用户2469861
用户2469861

如果您将 alpha=0isVisible=false,则点击和触摸功能也会被禁用。

有两种方法可以解决此问题,

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

levelTapCircle.alpha=0.01
2013-10-16 04:53:07
用户2868291
用户2868291

正如上述所说,如果 alpha = 0 或者 isVisible = false,那么触摸事件将被禁用。

但是你可以通过设置 isHitTestable = true 来避免这种情况,这将使你免受任何解决方法的困扰。

object.alpha = 0
-- 或者 --
object.isVisible = false

-- 启用触摸/点击事件 --
object.isHitTestable = true
2013-10-16 15:28:18