我在屏幕上显示一个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(本例中为圆圈)接收点击事件? 如果没有,我如何从图像上的特定圆形区域接收点击事件,但没有实际显示圆圈?
答案 0 :(得分:1)
如果设置alpha=0
或isVisible=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