0

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

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

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

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 以隐藏圆圈,则不会调用点击事件。

levelTapCircle.alpha=0

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

levelTapCircle.isVisible = false

我的问题是:

是否可以从隐藏的 displayObjects(在这种情况下为圆圈)接收点击事件?如果没有,我怎样才能从图像上的特定圆形区域接收点击事件,但不实际显示圆圈?

4

2 回答 2

1

如果您设置alpha=0isVisible=false然后点击和触摸功能也被禁用。

您可以通过两种方法处理此问题,

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

或者

levelTapCircle.alpha=0.01
于 2013-10-16T04:53:07.157 回答
1

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

但是,您可以使用 isHitTestable = true 阻止这种情况发生。这使您不必使用任何解决方法。

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

-- Enable Touch/Tap Events With --
object.isHitTestable = true
于 2013-10-16T15:28:18.047 回答