Android 如何禁用Corona中的隐藏按钮?

Android 如何禁用Corona中的隐藏按钮?,android,events,button,lua,coronasdk,Android,Events,Button,Lua,Coronasdk,比方说 -我有一个按钮,可以监听“点击”事件,并指向执行某些操作的函数 -我放了一张盖住按钮的图片。向上一层 当我点击按钮所在区域上方的封面图像时,事件函数仍会执行 我如何避免这种情况 例如: local function hidebg() display.remove(logo3) logo3=nil end local logo2= display.newImage("logo.png") logo2.x=display.contentCenterX logo2.y=28

比方说

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

-我放了一张盖住按钮的图片。向上一层

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

我如何避免这种情况

例如:

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并解决问题,但是我在不同的层中有几十个不同的组中的按钮,我想知道如何以一种智能的方式来完成。也许会让整个团队瘫痪?我不知道。

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

1)只需创建一个监听器,如下所示覆盖
返回true

function coverPressed()
    return true;
end
cover:addEventListener("tap",coverPressed)
2)检查
cover
是否存在,然后删除
logo2的侦听器,如下所示:

logo2:removeEventListener("tap", hidebg)

继续编码 有两种方法可以在项目中禁用该按钮

1)只需创建一个监听器,如下所示覆盖
返回true

function coverPressed()
    return true;
end
cover:addEventListener("tap",coverPressed)
2)检查
cover
是否存在,然后删除
logo2的侦听器,如下所示:

logo2:removeEventListener("tap", hidebg)
继续编码。。。。。。。。。。。。控制触摸传播 此问题可以通过添加一个触摸事件监听器来解决,该监听器将
true
返回到masking DisplayObject,如中所述,这是因为它处理或停止触摸的传播。被掩蔽对象处理后,触摸将永远不会到达位于显示层次结构较低位置(或较低位置,如果您愿意)的按钮上的侦听器

下文对此进行了解释:

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

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

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

更改小部件属性 如果您的
按钮
来自
小部件。*
库,则只需禁用并使其不可见,即可获得相同的结果:

button:setEnabled( false )
button.isVisible = false
顺便说一句,使用
isVisible
(而不是更改
alpha
)的优点是,在隐藏按钮之前不需要跟踪alpha值。如果以后执行
button.isVisible=true
,按钮Widget将具有与以前相同的alpha值。

控制触摸传播 此问题可以通过添加一个触摸事件监听器来解决,该监听器将
true
返回到masking DisplayObject,如中所述,这是因为它处理或停止触摸的传播。被掩蔽对象处理后,触摸将永远不会到达位于显示层次结构较低位置(或较低位置,如果您愿意)的按钮上的侦听器

下文对此进行了解释:

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

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

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

更改小部件属性 如果您的
按钮
来自
小部件。*
库,则只需禁用并使其不可见,即可获得相同的结果:

button:setEnabled( false )
button.isVisible = false

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

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