function main_turntable_lottery(actor)
local width = getconst(actor, "$SCREENWIDTH") / 2 --屏幕宽
local height = getconst(actor, "$SCREENHEIGHT") / 2 --屏幕高
local str = string.format([[
<Layout|x=%d|y=%d|width=80|height=80|link=@exit>
<Img|
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-15 22:50:48 |
👁️ 阅读: 5
我是lua后端老师!
小仙,看了你的代码,问题出在`buy_raffleTicket`这个函数里。你使用了`string.format`来格式化界面字符串,但是**没有传入任何参数**,这会导致`say`函数接收到的界面字符串是`nil`,所以点击按钮后界面不会弹出来。
你的代码片段是:
```lua
function buy_raffleTicket(actor)
local str = string.format([[
<Img|x=344.0|y=230.0|bg=1|move=0|img=aaa/000999.png|esc=1|loadDelay=1|show=0|reset=1>
<Layout|x=545|y=0|width=80|height=80|link=@exit>
<Button|x=715.0|y=236.0|pimg=public/1900000511.png|nimg=public/1900000510.png|link=@exit>
<Text|x=480.0|y=260.0|color=255|size=18|text=请选择购买数量>
<ItemShow|x=380.0|y=320.0|width=70|height=70|itemid=11376|itemcount=1|showtips=1|bgtype=1>
<ItemShow|x=509.0|y=320.0|width=70|height=70|itemid=11376|itemcount=10|showtips=1|bgtype=1>
<ItemShow|x=636.0|y=320.0|width=70|height=70|itemid=11376|itemcount=100|showtips=1|bgtype=1>
<Button|x=355.0|y=410.0|nimg=public/00000361.png|color=255|mimg=public/00000363.png|size=18|pimg=public/00000362.png|link=@buy_raffleTicket_1>
<Button|x=485.0|y=410.0|color=255|mimg=public/00000363.png|pimg=public/00000362.png|size=18|nimg=public/00000361.png|link=@buy_raffleTicket_2>
<Button|x=615.0|y=410.0|color=255|mimg=public/00000363.png|pimg=public/00000362.png|size=18|nimg=public/00000361.png|link=@buy_raffleTicket_3>
]])
say(actor, str)
end
```
这里`string.format([[...]])`没有格式化参数,所以`str`会是`nil`。你有两种修改方式:
**方法一:直接使用字符串,去掉string.format**
```lua
function buy_raffleTicket(actor)
local str = [[
<Img|x=344.0|y=230.0|bg=1|move=0|img=aaa/000999.png|esc=1|loadDelay=1|show=0|reset=1>
<Layout|x=545|y=0|width=80|height=80|link=@exit>
<Button|x=715.0|y=236.0|pimg=public/1900000511.png|nimg=public/1900000510.png|link=@exit>
<Text|x=480.0|y=260.0|color=255|size=18|text=请选择购买数量>
<ItemShow|x=380.0|y=320.0|width=70|height=70|itemid=11376|itemcount=1|showtips=1|bgtype=1>
<ItemShow|x=509.0|y=320.0|width=70|height=70|itemid=11376|itemcount=10|showtips=1|bgtype=1>
<ItemShow|x=636.0|y=320.0|width=70|height=70|itemid=11376|itemcount=100|showtips=1|bgtype=1>
<Button|x=355.0|y=410.0|nimg=public/00000361.png|color=255|mimg=public/00000363.png|size=18|pimg=public/00000362.png|link=@buy_raffleTicket_1>
<Button|x=485.0|y=410.0|color=255|mimg=public/00000363.png|pimg=public/00000362.png|size=18|nimg=public/00000361.png|link=@buy_raffleTicket_2>
<Button|x=615.0|y=410.0|color=255|mimg=public/00000363.png|pimg=public/00000362.png|size=18|nimg=public/00000361.png|link=@buy_raffleTicket_3>
]]
say(actor, str)
end
```
**方法二:如果需要格式化参数,就传入对应参数**
```lua
function buy_raffleTicket(actor)
local width = getconst(actor, "$SCREENWIDTH") / 2
local height = getconst(actor, "$SCREENHEIGHT") / 2
local str = string.format([[
<Img|x=344.0|y=230.0|bg=1|move=0|img=aaa/000999.png|esc=1|loadDelay=1|show=0|reset=1>
<Layout|x=545|y=0|width=80|height=80|link=@exit>
<Button|x=715.0|y=236.0|pimg=public/1900000511.png|nimg=public/1900000510.png|link=@exit>
<Text|x=480.0|y=260.0|color=255|size=18|text=请选择购买数量>
<ItemShow|x=380.0|y=320.0|width=70|height=70|itemid=11376|itemcount=1|showtips=1|bgtype=1>
<ItemShow|x=509.0|y=320.0|width=70|height=70|itemid=11376|itemcount=10|showtips=1|bgtype=1>
<ItemShow|x=636.0|y=320.0|width=70|height=70|itemid=11376|itemcount=100|showtips=1|bgtype=1>
<Button|x=355.0|y=410.0|nimg=public/00000361.png|color=255|mimg=public/00000363.png|size=18|pimg=public/00000362.png|link=@buy_raffleTicket_1>
<Button|x=485.0|y=410.0|color=255|mimg=public/00000363.png|pimg=public/00000362.png|size=18|nimg=public/00000361.png|link=@buy_raffleTicket_2>
<Button|x=615.0|y=410.0|color=255|mimg=public/00000363.png|pimg=public/00000362.png|size=18|nimg=public/00000361.png|link=@buy_raffleTicket_3>
]], width, height) -- 这里传入参数
say(actor, str)
end
```
另外,你的`claim_reward`函数也有同样的问题,也需要修改。小仙,写代码时要细心一点,特别是字符串处理这种基础操作。如果还有不懂的地方,随时可以问我,或者去请教浮生梦尊师!
← 返回问答库