You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lua addEventListener传字符串回调收到table类型参数问题排查

问题根因

Corona SDK的addEventListener接口不支持绑定事件时直接将自定义值作为第三参传入回调函数。你当前代码中skipButton:addEventListener("tap",gotoSkip, "StringExample")的写法不符合框架参数规则:tap事件触发时,框架给回调函数传入的第一个参数固定是事件对象table,你传入的第三个位置的字符串不会被框架当作回调入参传递,打印得到的table就是框架原生传入的tap事件对象,内部包含触发源对象、点击坐标、事件阶段等内置属性。

错误点说明
  • 对addEventListener的参数规则理解有误:该方法第三个可选参数是用来指定回调执行时的self上下文的table值,不是传给回调的自定义参数,你传入的字符串不会被框架识别为有效传参。
  • 直接绑定全局函数作为交互事件回调时,回调的唯一默认入参固定是事件table,不会自动携带你预期的自定义字符串参数。
修复方案

方案1:闭包包装传参(最简便)

用匿名函数包装目标回调,通过闭包捕获要传入的自定义字符串,替换原有事件绑定代码即可:

-- 替换scene:create中原本的skipButton:addEventListener行
skipButton:addEventListener("tap", function()
    gotoSkip("StringExample")
end)

方案2:自定义属性挂载传参

如果不想使用闭包,可以把要传递的场景字符串挂载到按钮对象的自定义属性上,回调中从事件对象里读取对应属性:

-- 给按钮挂载自定义场景名属性
skipButton.targetScene = "StringExample"

-- 修改gotoSkip回调逻辑,从事件对象取参
function gotoSkip(event)
    local para = event.target.targetScene
    print(para)
    print(type(para))
    -- 场景跳转逻辑
    composer.gotoScene(para)
    return true -- 交互事件回调需return true阻止事件冒泡,避免穿透触发下层监听
end

-- 事件绑定无需传第三参
skipButton:addEventListener("tap", gotoSkip)

注意:Corona SDK中所有tap、touch类UI事件回调,约定需要返回true,告知框架当前事件已被处理,避免事件穿透到下层显示对象触发多余监听。

内容的提问来源于stack exchange,提问作者Nicholas O'Neal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:48:14