SL:print("打开图技能大师界面")
local npc = {}
local function networkCB(msgID, p1, p2, p3, msgData)
SL:print("===== 收到后端消息 =====")
SL:print("消息ID: " .. tostring(msgID))
SL:print("参数1: " .. tostring(p1))
SL:print("参数2: " .. tostring(p
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-27 19:46:21 |
👁️ 阅读: 7
这段代码有几个关键问题需要修正:
1. **界面创建参数错误**:`GUI:Win_Create`函数缺少必要的参数
2. **动画函数使用不当**:`GUI:Timeline_MoveTo`函数在知识库中不存在
3. **动作序列创建错误**:`GUI:ActionSpawn`函数在知识库中不存在
修正后的代码:
```lua
SL:print("打开图技能大师界面")
local npc = {}
local function networkCB(msgID, p1, p2, p3, msgData)
SL:print("===== 收到后端消息 =====")
SL:print("消息ID: " .. tostring(msgID))
SL:print("参数1: " .. tostring(p1))
SL:print("参数2: " .. tostring(p2))
SL:print("参数3: " .. tostring(p3))
SL:print("字符串: " .. tostring(msgData))
SL:print("=======================")
if msgID == 1016 and msgData == "技能大师" then
if p3 == 0 then
npc:openWin()
end
end
end
function npc:openWin()
-- 创建主界面(使用正确的参数)
local win_skMaster = GUI:Win_Create("win_skMaster", 0, 0, 0, 0, false, false, true, false, false, false, 1)
GUI:LoadExport(win_skMaster, "skill")
npc.ui = GUI:ui_delegate(win_skMaster)
GUI:addOnClickEvent(npc.ui.esc, function()
GUI:Win_Close(win_skMaster)
end)
-- 左侧平移动画
local a = 1
-- 向上平移
GUI:addOnClickEvent(npc.ui.jobBut_1, function()
if a == 1 then
a = 2
-- 使用runAction替代Timeline_MoveTo
GUI:runAction(npc.ui.Panel_1, GUI:ActionMoveTo(0.35, 5, 316))
GUI:setPosition(npc.ui.Panel_3, 5, -316)
elseif a == 2 then
a = 3
GUI:runAction(npc.ui.Panel_2, GUI:ActionMoveTo(0.35, 5, 316))
GUI:setPosition(npc.ui.Panel_1, 5, -316)
else
a = 1
GUI:runAction(npc.ui.Panel_3, GUI:ActionMoveTo(0.35, 5, 316))
GUI:setPosition(npc.ui.Panel_2, 5, -316)
end
local panelName = "Panel_" .. a
local moveActionUp_1 = GUI:ActionMoveBy(0.2, 0, 35)
local moveActionDown_1 = GUI:ActionMoveBy(0.3, 0, -35)
local moveAction_Up = GUI:ActionSequence(moveActionUp_1, moveActionDown_1)
GUI:runAction(npc.ui[panelName], GUI:ActionMoveTo(0.35, 5, 0))
local delayAction = GUI:DelayTime(0.25)
local easeAction = GUI:ActionEaseExponentialOut(moveAction_Up)
local sequenceAction = GUI:ActionSequence(delayAction, easeAction)
GUI:runAction(npc.ui[panelName], sequenceAction)
end)
-- 向下平移
GUI:addOnClickEvent(npc.ui.jobBut_2, function()
if a == 1 then
a = 3
GUI:runAction(npc.ui.Panel_1, GUI:ActionMoveTo(0.35, 5, -316))
GUI:setPosition(npc.ui.Panel_2, 5, 316)
elseif a == 3 then
a = 2
GUI:runAction(npc.ui.Panel_3, GUI:ActionMoveTo(0.35, 5, -316))
GUI:setPosition(npc.ui.Panel_1, 5, 316)
else
a = 1
GUI:runAction(npc.ui.Panel_2, GUI:ActionMoveTo(0.35, 5, -316))
GUI:setPosition(npc.ui.Panel_3, 5, 316)
end
local panelName = "Panel_" .. a
local moveActionUp_2 = GUI:ActionMoveBy(0.2, 0, 35)
local moveActionDown_2 = GUI:ActionMoveBy(0.3, 0, -35)
local moveAction_Down = GUI:ActionSequence(moveActionDown_2, moveActionUp_2)
GUI:runAction(npc.ui[panelName], GUI:ActionMoveTo(0.35, 5, 0))
local delayAction = GUI:DelayTime(0.25)
local easeAction = GUI:ActionEaseExponentialOut(moveAction_Down)
local sequenceAction = GUI:ActionSequence(delayAction, easeAction)
GUI:runAction(npc.ui[panelName], sequenceAction)
end)
if a == 1 then
-- 自定义函数:同时执行多个动作(因为ActionSpawn不存在)
local function runMultipleActions(widget1, action1, widget2, action2, widget3, action3)
GUI:runAction(widget1, action1)
GUI:runAction(widget2, action2)
GUI:runAction(widget3, action3)
end
local action_1 = GUI:ActionSequence(
GUI:ActionScaleTo(0.2, 1.0), -- 注意:ScaleTo的第二个参数是缩放倍数
GUI:ActionMoveTo(0.2, 401, 127)
)
local action_2 = GUI:ActionSequence(
GUI:ActionScaleTo(0.2, 0.8),
GUI:ActionMoveTo(0.2, 32, 127)
)
local action_3 = GUI:ActionSequence(
GUI:ActionScaleTo(0.2, 0.5),
GUI:ActionMoveTo(0.2, 217, 86)
)
GUI:addOnClickEvent(npc.ui.Image_1, function()
runMultipleActions(
npc.ui.Effect_1, action_1,
npc.ui.Effect_2, action_2,
npc.ui.Effect_3, action_3
)
end)
end
end
SL:RegisterLuaNetMsg(1016, networkCB)
```
**主要修正点:**
1. `GUI:Win_Create`补全了所有必要参数
2. 用`GUI:runAction` + `GUI:ActionMoveTo`替代不存在的`GUI:Timeline_MoveTo`
3. 用`GUI:setPosition`替代瞬移效果
4. 创建了自定义函数`runMultipleActions`来同时执行多个动作
5. 修正了`GUI:ActionScaleTo`的参数(应该是缩放倍数,不是百分比)
**学习建议:**
- 使用动作函数时,确保参数正确
- 复杂的动画效果可以拆分成多个简单动作
- 记得检查界面创建时的参数完整性
如果还有不明白的地方,随时可以问浮生梦老师!
← 返回问答库