在lua中调用函数并传递参数
我有以下功能 不起作用: 我想传递一个参数,以便加载适当的级别,因此我有以下按钮:在lua中调用函数并传递参数,lua,coronasdk,Lua,Coronasdk,我有以下功能 不起作用: 我想传递一个参数,以便加载适当的级别,因此我有以下按钮: planet1 = widget.newButton{ label="1", labelColor = { default={255}, over={128} }, fontSize=25, defaultFile="levelplanet.png", overFile="levelplanet-over.png", widt
planet1 = widget.newButton{
label="1",
labelColor = { default={255}, over={128} },
fontSize=25,
defaultFile="levelplanet.png",
overFile="levelplanet-over.png",
width=62, height=62,
onRelease = onPlayBtnRelease("loadscene1") -- event listener function
}
但上述方法不起作用
没关系:
如果我这样做
local function onPlayBtnRelease
storyboard.gotoScene( "loadscene1", "fade", 500 )
return true
end
planet1 = widget.newButton{
label="1",
labelColor = { default={255}, over={128} },
fontSize=25,
defaultFile="levelplanet.png",
overFile="levelplanet-over.png",
width=62, height=62,
onRelease = onPlayBtnRelease
}
它编译。如何将参数传递给onPlayBtnRelease?知道这会导致编译错误的原因吗
错误:
错误很可能是由以下原因引起的:
local function onPlayBtnRelease
storyboard.gotoScene( "loadscene1", "fade", 500 )
return true
end
因为函数定义中缺少参数列表
我猜错误可能与此类似:
G:\root\main\core\Lua/app/lua51/bin/lua.exe: lua_08.lua:5:
'(' expected near 'storyboard'
从您发布的内容来看,onPlayBtnRelease似乎是一个函数,因此应该将其声明为一个函数,并使用一个参数作为触发事件:
local function onPlayBtnRelease(event)
// ... code ...
return true
end
编辑
onRelease字段必须是侦听器,而不是调用它时返回的结果。试着简单地说:
planet1 = widget.newButton{
label="1",
labelColor = { default={255}, over={128} },
fontSize=25,
defaultFile="levelplanet.png",
overFile="levelplanet-over.png",
width=62, height=62,
onRelease = onPlayBtnRelease
}
错误很可能是由以下原因引起的:
local function onPlayBtnRelease
storyboard.gotoScene( "loadscene1", "fade", 500 )
return true
end
因为函数定义中缺少参数列表
我猜错误可能与此类似:
G:\root\main\core\Lua/app/lua51/bin/lua.exe: lua_08.lua:5:
'(' expected near 'storyboard'
从您发布的内容来看,onPlayBtnRelease似乎是一个函数,因此应该将其声明为一个函数,并使用一个参数作为触发事件:
local function onPlayBtnRelease(event)
// ... code ...
return true
end
编辑
onRelease字段必须是侦听器,而不是调用它时返回的结果。试着简单地说:
planet1 = widget.newButton{
label="1",
labelColor = { default={255}, over={128} },
fontSize=25,
defaultFile="levelplanet.png",
overFile="levelplanet-over.png",
width=62, height=62,
onRelease = onPlayBtnRelease
}
不知道您是否可以使用一些非标准选项构建Widget对象,而不必将其包装到另一个表中,如下所示:
local function onPlayBtnRelease(event)
storyboard.gotoScene(event.target.next_scene, "fade", 500 )
return true
end
planet1 = widget.newButton{
label="1",
labelColor = { default={255}, over={128} },
fontSize=25,
defaultFile="levelplanet.png",
overFile="levelplanet-over.png",
width=62, height=62,
next_scene = "loadscene1"
}
onRelease = function() return onPlayBtnRelease("loadscene1") end
onRelease = newclosure(onPlayBtnRelease, "loadscene1")
如果它不起作用,那么表侦听器就是您正在寻找的对象。想知道,您是否可以使用一些非标准选项构建小部件对象,而不必像这样将其包装到另一个表中:
local function onPlayBtnRelease(event)
storyboard.gotoScene(event.target.next_scene, "fade", 500 )
return true
end
planet1 = widget.newButton{
label="1",
labelColor = { default={255}, over={128} },
fontSize=25,
defaultFile="levelplanet.png",
overFile="levelplanet-over.png",
width=62, height=62,
next_scene = "loadscene1"
}
onRelease = function() return onPlayBtnRelease("loadscene1") end
onRelease = newclosure(onPlayBtnRelease, "loadscene1")
如果它不起作用,那么您需要的就是表侦听器。是否可以将所需的数据关联到构造函数之外?例如:
planet1 = widget.newButton { -- then initialize as usuall
}
planet1.next_scene = "loadscene1"
也许可以将需要的数据关联到构造函数之外?例如:
planet1 = widget.newButton { -- then initialize as usuall
}
planet1.next_scene = "loadscene1"
对这一行的解释:
onRelease = onPlayBtnRelease("loadscene1") -- event listener function
此行调用onPlayBtnReleaseloadscene1并将返回值分配给onRelease字段。因此,您可能需要这样做:
local function onPlayBtnRelease(event)
storyboard.gotoScene(event.target.next_scene, "fade", 500 )
return true
end
planet1 = widget.newButton{
label="1",
labelColor = { default={255}, over={128} },
fontSize=25,
defaultFile="levelplanet.png",
overFile="levelplanet-over.png",
width=62, height=62,
next_scene = "loadscene1"
}
onRelease = function() return onPlayBtnRelease("loadscene1") end
onRelease = newclosure(onPlayBtnRelease, "loadscene1")
如果你需要经常这样做,你可以做一个闭包生成器
local function newclosure(func, ...)
local args = {...}
return function()
return func(unpack(args));
end
end
这样,您只需这样写一行:
local function onPlayBtnRelease(event)
storyboard.gotoScene(event.target.next_scene, "fade", 500 )
return true
end
planet1 = widget.newButton{
label="1",
labelColor = { default={255}, over={128} },
fontSize=25,
defaultFile="levelplanet.png",
overFile="levelplanet-over.png",
width=62, height=62,
next_scene = "loadscene1"
}
onRelease = function() return onPlayBtnRelease("loadscene1") end
onRelease = newclosure(onPlayBtnRelease, "loadscene1")
对这一行的解释:
onRelease = onPlayBtnRelease("loadscene1") -- event listener function
此行调用onPlayBtnReleaseloadscene1并将返回值分配给onRelease字段。因此,您可能需要这样做:
local function onPlayBtnRelease(event)
storyboard.gotoScene(event.target.next_scene, "fade", 500 )
return true
end
planet1 = widget.newButton{
label="1",
labelColor = { default={255}, over={128} },
fontSize=25,
defaultFile="levelplanet.png",
overFile="levelplanet-over.png",
width=62, height=62,
next_scene = "loadscene1"
}
onRelease = function() return onPlayBtnRelease("loadscene1") end
onRelease = newclosure(onPlayBtnRelease, "loadscene1")
如果你需要经常这样做,你可以做一个闭包生成器
local function newclosure(func, ...)
local args = {...}
return function()
return func(unpack(args));
end
end
这样,您只需这样写一行:
local function onPlayBtnRelease(event)
storyboard.gotoScene(event.target.next_scene, "fade", 500 )
return true
end
planet1 = widget.newButton{
label="1",
labelColor = { default={255}, over={128} },
fontSize=25,
defaultFile="levelplanet.png",
overFile="levelplanet-over.png",
width=62, height=62,
next_scene = "loadscene1"
}
onRelease = function() return onPlayBtnRelease("loadscene1") end
onRelease = newclosure(onPlayBtnRelease, "loadscene1")
试试这个,肯定会有用的
local onPlayBtnRelease = function(event)
storyboard.gotoScene(event.target.myScene, "fade", 500 )
return true
end
planet1 = widget.newButton{
label="1",
labelColor = { default={255}, over={128} },
fontSize=25,
defaultFile="levelplanet.png",
overFile="levelplanet-over.png",
width=62, height=62,
onRelease = onPlayBtnRelease
}
planet1.myScene = "yourSceneName"
试试这个,肯定会有用的
local onPlayBtnRelease = function(event)
storyboard.gotoScene(event.target.myScene, "fade", 500 )
return true
end
planet1 = widget.newButton{
label="1",
labelColor = { default={255}, over={128} },
fontSize=25,
defaultFile="levelplanet.png",
overFile="levelplanet-over.png",
width=62, height=62,
onRelease = onPlayBtnRelease
}
planet1.myScene = "yourSceneName"
你能告诉我们确切的编译错误吗?您使用的是哪个小部件库版本?@Kamiccolo I更新了帖子,输入了准确的错误消息。将onRelease=onPlayBtnReleaseloadscene1-事件侦听器函数替换为onRelease=onPlayBtnReleaseloadscene1函数end@EgorSkriptunoff直到情节提要的调用。gotoScene级别,淡出,500则应为字符串,但级别为表。有什么想法吗?你能告诉我们确切的编译错误吗?您使用的是哪个小部件库版本?@Kamiccolo I更新了帖子,输入了准确的错误消息。将onRelease=onPlayBtnReleaseloadscene1-事件侦听器函数替换为onRelease=onPlayBtnReleaseloadscene1函数end@EgorSkriptunoff直到情节提要的调用。gotoScene级别,淡出,500则应为字符串,但级别为表。有什么想法吗?但在第一种情况下,如果存在错误,我在函数定义中有参数列表。我知道这是可行的,但我想实现的是在所有级别上都有一个函数,在onPlayBtnRelease中,使用if语句根据函数定义中的参数选择要加载的级别。这可能吗?@AvraamMavridis您无法控制传递给该侦听器的参数,因为它是由事件循环调用的。侦听器被传递一个参数,该参数是触发的事件。要找到替代方案,您必须告诉我们当前级别的信息存储在哪里。是在全球范围内吗?它是否在一个从侦听器定义可见的本地中?但是在第一种情况下,如果存在错误,我在函数定义中有参数列表,我知道这是可行的,但我想要实现的是,在onPlayBtnRelease和onPlayBtnRelease-use-if语句中为所有级别提供一个函数,以根据函数定义中的参数选择要加载的级别。这可能吗?@AvraamMavridis您无法控制传递给该侦听器的参数,因为它是由事件循环调用的。侦听器被传递一个参数,该参数是触发的事件。要找到替代方案,您必须告诉我们当前级别的信息存储在哪里。是在全球范围内吗?是在当地的whi吗 ch在侦听器定义中可见?planet1.next_scene=loadscene1如何?无聊的。。。还是要避免包装…:那么planet1.next_scene=loadscene1呢?无聊的。。。还是要避免包装…: