【问题标题】:How to disable hidden buttons in Corona?如何禁用 Corona 中的隐藏按钮?
【发布时间】:2013-08-28 12:43:01
【问题描述】:

我们说

-我有一个按钮,它监听“点击”事件,并指向一个执行某些操作的函数。

-我放置了一个覆盖按钮的 ImageRact。一层。

当我点击按钮所在区域正上方的封面图片时,事件函数仍然执行。

如何避免这种情况?

示例:

local function hidebg()

    display.remove(logo3)
    logo3=nil
end

local logo2= display.newImage("logo.png")
logo2.x=display.contentCenterX
logo2.y=280
logo2.width=200
logo2.height=74
logo2:addEventListener("tap", hidebg)

local cover =display.newImageRect("NEW GAME A.png", 480,320)
cover.x=display.contentCenterX/2
cover.y=display.contentCenterY/2

虽然“logo2”被“cover”图像覆盖,但仍执行 hidebg() 函数。

我知道我可以使按钮 isVisible=false 并解决问题,但是我在不同层的不同组中有几十个按钮,我想知道如何以一种聪明的方式做到这一点。也许以某种方式禁用整个组?我不知道。

【问题讨论】:

  • 如何删除 logo2 按钮。创建后只能删除。所以首先创建一个按钮并添加功能,然后将 addEventListener 添加到对象。

标签: android events button lua coronasdk


【解决方案1】:

有两种方法可以在项目中禁用该按钮。

1) 只需为coverreturn true 创建如下监听器:

function coverPressed()
    return true;
end
cover:addEventListener("tap",coverPressed)

2) 检查cover是否存在,然后将logo2的监听器移除为:

logo2:removeEventListener("tap", hidebg)

继续编码............ ?

【讨论】:

    【解决方案2】:

    控制触摸传播

    正如accepted answer 中所建议的那样,可以通过添加一个将true 返回到掩蔽DisplayObject 的触摸事件侦听器来解决此问题的原因是,它可以处理或停止触摸的传播。被遮罩对象处理后,触摸将永远不会到达位于显示层次结构中更靠下(或更靠后,如果您愿意)的按钮上的侦听器。

    这在Corona SDK documentation on tap/touch propagation中有解释:

    当用户触摸屏幕时,该事件被分派到显示层次结构。只有那些与屏幕上的触摸位置相交的显示对象才会收到该事件。

    点击和触摸事件以特定顺序在这些对象中传播。默认情况下,接收事件的第一个对象是显示层次结构中与触摸位置相交的最前面的显示对象。接收事件的下一个对象是层次结构中与触摸位置相交的下一个对象,依此类推。

    点击和触摸事件会传播,直到它们被“处理”。这意味着如果您在显示层次结构中有多个相互重叠的对象,并且每个对象都应用了点击或触摸事件侦听器,则该事件将通过所有这些对象传播。但是,您可以通过告诉 Corona 事件已被处理来停止传播到下一个底层对象。这就像从事件侦听器返回 true 一样简单 [强调我的] - 这会停止传播周期并防止任何底层对象响应 hit 事件。

    更改小部件属性

    如果您的 button 来自 widget.* 库,您可以通过禁用它并使其不可见来更简单地获得相同的结果:

    button:setEnabled( false )
    button.isVisible = false
    

    顺便说一句,使用isVisible(而不是更改alpha)的优点是您不需要在隐藏按钮之前跟踪alpha 值。如果您稍后再执行button.isVisible = true,则 ButtonWidget 的 alpha 值将与之前相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-14
      • 2020-03-19
      • 1970-01-01
      • 2018-01-18
      • 2015-01-15
      相关资源
      最近更新 更多