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))
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-27 19:08:20 |
👁️ 阅读: 3
你的代码有几个问题需要修正:
1. **动作创建顺序问题**:`GUI:ActionEaseExponentialOut()` 需要传入一个动作对象,而不是直接调用
2. **Timeline_MoveTo 使用错误**:这个函数在浮生梦老师的前端课程中不存在,应该使用 `GUI:runAction()` 配合 `GUI:ActionMoveTo()`
3. **动作执行时机**:你在 `Timeline_MoveTo` 的回调中创建了动作但没有执行
修正后的代码:
```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 == 1017 and msgData == "沙城捐献" then
if p3 == 0 then
npc:openWin()
end
end
end
function npc:openWin()
-- 创建外部界面
local win_donate = GUI:Win_Create("win_donate", 0, 0, 0, 0)
GUI:LoadExport(win_donate, "donate")
npc.ui = GUI:ui_delegate(win_donate)
GUI:addOnClickEvent(npc.ui.esc, function()
GUI:Win_Close(win_donate)
end)
-- 左侧平移动画
local a = 1
GUI:addOnClickEvent(npc.ui.Button_1, function()
if a == 1 then
a = 2
GUI:runAction(npc.ui.Panel_1, GUI:ActionMoveTo(0, 5, 316))
GUI:runAction(npc.ui.Panel_3, GUI:ActionMoveTo(0, 5, -316))
elseif a == 2 then
a = 3
GUI:runAction(npc.ui.Panel_2, GUI:ActionMoveTo(0, 5, 316))
GUI:runAction(npc.ui.Panel_1, GUI:ActionMoveTo(0, 5, -316))
else
a = 1
GUI:runAction(npc.ui.Panel_3, GUI:ActionMoveTo(0, 5, 316))
GUI:runAction(npc.ui.Panel_2, GUI:ActionMoveTo(0, 5, -316))
end
local panelName = "Panel_" .. a
local moveActionUp_1 = GUI:ActionMoveTo(0.2, 5, 35)
local moveActionDown_1 = GUI:ActionMoveTo(0.3, 5, 0)
local moveAction_Up = GUI:ActionSequence(moveActionUp_1, moveActionDown_1)
local easeAction = GUI:ActionEaseExponentialOut(moveAction_Up)
GUI:runAction(npc.ui[panelName], easeAction)
end)
GUI:addOnClickEvent(npc.ui.Button_2, function()
if a == 1 then
a = 3
GUI:runAction(npc.ui.Panel_2, GUI:ActionMoveTo(0, 5, 316))
GUI:runAction(npc.ui.Panel_1, GUI:ActionMoveTo(0, 5, -316))
elseif a == 3 then
a = 2
GUI:runAction(npc.ui.Panel_1, GUI:ActionMoveTo(0, 5, 316))
GUI:runAction(npc.ui.Panel_3, GUI:ActionMoveTo(0, 5, -316))
else
a = 1
GUI:runAction(npc.ui.Panel_3, GUI:ActionMoveTo(0, 5, 316))
GUI:runAction(npc.ui.Panel_2, GUI:ActionMoveTo(0, 5, -316))
end
local panelName = "Panel_" .. a
local moveActionUp_2 = GUI:ActionMoveTo(0.3, 5, -35)
local moveActionDown_2 = GUI:ActionMoveTo(0.2, 5, 0)
local moveAction_Down = GUI:ActionSequence(moveActionUp_2, moveActionDown_2)
local easeAction = GUI:ActionEaseExponentialOut(moveAction_Down)
GUI:runAction(npc.ui[panelName], easeAction)
end)
if a == 1 then
local action_1 = GUI:ActionSpawn(GUI:ActionScaleTo(0.2, 100), GUI:ActionMoveTo(0.2, 401, 127))
local action_2 = GUI:ActionSpawn(GUI:ActionScaleTo(0.2, 80), GUI:ActionMoveTo(0.2, 32, 127))
local action_3 = GUI:ActionSpawn(GUI:ActionScaleTo(0.2, 50), GUI:ActionMoveTo(0.2, 217, 86))
GUI:addOnClickEvent(npc.ui.Button_4, function()
if not GUI:Win_IsNull(npc.ui.Effect_1) then
GUI:runAction(npc.ui.Effect_1, action_1)
end
if not GUI:Win_IsNull(npc.ui.Effect_2) then
GUI:runAction(npc.ui.Effect_2, action_2)
end
end)
end
end
SL:RegisterLuaNetMsg(1017, networkCB)
```
主要修改:
1. 将 `GUI:Timeline_MoveTo()` 改为 `GUI:runAction()` + `GUI:ActionMoveTo()`
2. `GUI:ActionEaseExponentialOut()` 需要传入动作对象作为参数
3. 添加了空值判断 `GUI:Win_IsNull()` 避免空对象错误
4. 动作创建后需要立即执行,而不是在回调中创建
注意:`GUI:Timeline_MoveTo()` 这个函数在前端课程中不存在,应该使用标准的动作系统。
← 返回问答库