local zhuansheng = {}
function zhuansheng.main(param1, param2, param3, param4)
SL:print("===== 转生界面打开 =====")
lib:Require(param1, function(state)
if state then
if param1 then
zhuansheng.parent = lib:o
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-11 20:48:31 |
👁️ 阅读: 5
根据你的代码,我看到你已经为第二个动画(curlevel==2的情况)设置了部分逻辑,但存在几个问题需要修正:
1. **动画位置计算错误**:第二个动画的移动距离计算有误
2. **动画嵌套问题**:第二个动画应该独立执行,而不是嵌套在第一个动画的回调中
3. **条件判断逻辑**:需要正确判断当前等级
以下是修正后的代码:
```lua
-- 在升级按钮的点击事件中修改动画部分
GUI:addOnClickEvent(ui["Button_1"], function()
SL:print("点击升级按钮")
GUI:delayTouchEnabled(ui["Button_1"], 0.2)
local msg = {}
msg.Script = zhuansheng.param1
local jsonstr = SL:JsonEncode(msg)
SL:SendLuaNetMsg(58003, zhuansheng.param2, 0, 0, jsonstr)
-- 检查条件
if next_data and lib and lib.checkitem then
local check_data = {
count = 2,
type1 = "物品",
name1 = next_data.name1 or "转生石",
value1 = tonumber(next_data.value1) or 0,
type2 = "货币",
name2 = next_data.name2 or "金币",
value2 = tonumber(next_data.value2) or 0,
}
local can_upgrade = lib:checkitem(check_data)
if not can_upgrade then
return
end
-- 根据当前等级执行不同的动画
if curlevel == 1 then
-- 第一个等级动画
local startX = 255
local startY = 281
local targetX = 77
local targetY = 281
local moveX = targetX - startX -- 77-255 = -178
local moveY = targetY - startY -- 281-281 = 0
GUI:stopAllActions(ui.Image_14)
GUI:setPosition(ui.Image_14, startX, startY)
GUI:setVisible(ui.Image_14, true)
local callback = function()
SL:print("等级1动画完成")
end
GUI:runAction(ui.Image_14, GUI:ActionSequence(
GUI:ActionScaleTo(0.5, 1.4),
GUI:ActionScaleTo(0.5, 1),
GUI:ActionMoveBy(0.5, moveX, moveY),
GUI:CallFunc(callback)
))
elseif curlevel == 2 then
-- 第二个等级动画
local startX = 255
local startY = 281
local targetX = 144
local targetY = 189
local moveX = targetX - startX -- 144-255 = -111
local moveY = targetY - startY -- 189-281 = -92
GUI:stopAllActions(ui.Image_14)
GUI:setPosition(ui.Image_14, startX, startY)
GUI:setVisible(ui.Image_14, true)
local callback = function()
SL:print("等级2动画完成")
end
GUI:runAction(ui.Image_14, GUI:ActionSequence(
GUI:ActionScaleTo(0.5, 1.4),
GUI:ActionScaleTo(0.5, 1),
GUI:ActionMoveBy(0.5, moveX, moveY),
GUI:CallFunc(callback)
))
end
-- 可以继续添加更多等级的动画
end
end)
```
**主要修改点:**
1. **使用if-elseif结构**:将两个动画放在并列的条件判断中,避免嵌套
2. **修正移动距离计算**:
- 等级1:从(255,281)移动到(77,281),移动(-178,0)
- 等级2:从(255,281)移动到(144,189),移动(-111,-92)
3. **独立回调函数**:每个动画有自己的完成回调
**扩展建议:**
如果你有更多等级需要不同的动画,可以继续添加:
```lua
elseif curlevel == 3 then
-- 第三个等级动画
-- 设置不同的目标位置
elseif curlevel == 4 then
-- 第四个等级动画
-- ...
```
这样每个等级都会有独立的动画路径,代码结构更清晰,也便于维护。
根据你的代码,我看到你已经为第二个动画(curlevel==2的情况)设置了部分逻辑,但存在几个问题需要修正:
1. **动画位置计算错误**:第二个动画的移动距离计算有误
2. **动画嵌套问题**:第二个动画应该独立执行,而不是嵌套在第一个动画的回调中
3. **条件判断逻辑**:需要正确判断当前等级
以下是修正后的代码:
```lua
-- 在升级按钮的点击事件中修改动画部分
GUI:addOnClickEvent(ui["Button_1"], function()
SL:print("点击升级按钮")
GUI:delayTouchEnabled(ui["Button_1"], 0.2)
local msg = {}
msg.Script = zhuansheng.param1
local jsonstr = SL:JsonEncode(msg)
SL:SendLuaNetMsg(58003, zhuansheng.param2, 0, 0, jsonstr)
-- 检查条件
if next_data and lib and lib.checkitem then
local check_data = {
count = 2,
type1 = "物品",
name1 = next_data.name1 or "转生石",
value1 = tonumber(next_data.value1) or 0,
type2 = "货币",
name2 = next_data.name2 or "金币",
value2 = tonumber(next_data.value2) or 0,
}
local can_upgrade = lib:checkitem(check_data)
if not can_upgrade then
return
end
-- 根据当前等级执行不同的动画
if curlevel == 1 then
-- 第一个等级动画
local startX = 255
local startY = 281
local targetX = 77
local targetY = 281
local moveX = targetX - startX -- 77-255 = -178
local moveY = targetY - startY -- 281-281 = 0
GUI:stopAllActions(ui.Image_14)
GUI:setPosition(ui.Image_14, startX, startY)
GUI:setVisible(ui.Image_14, true)
local callback = function()
SL:print("等级1动画完成")
end
GUI:runAction(ui.Image_14, GUI:ActionSequence(
GUI:ActionScaleTo(0.5, 1.4),
GUI:ActionScaleTo(0.5, 1),
GUI:ActionMoveBy(0.5, moveX, moveY),
GUI:CallFunc(callback)
))
elseif curlevel == 2 then
-- 第二个等级动画
local startX = 255
local startY = 281
local targetX = 144
local targetY = 189
local moveX = targetX - startX -- 144-255 = -111
local moveY = targetY - startY -- 189-281 = -92
GUI:stopAllActions(ui.Image_14)
GUI:setPosition(ui.Image_14, startX, startY)
GUI:setVisible(ui.Image_14, true)
local callback = function()
SL:print("等级2动画完成")
end
GUI:runAction(ui.Image_14, GUI:ActionSequence(
GUI:ActionScaleTo(0.5, 1.4),
GUI:ActionScaleTo(0.5, 1),
GUI:ActionMoveBy(0.5, moveX, moveY),
GUI:CallFunc(callback)
))
end
-- 可以继续添加更多等级的动画
end
end)
```
**主要修改点:**
1. **使用if-elseif结构**:将两个动画放在并列的条件判断中,避免嵌套
2. **修正移动距离计算**:
- 等级1:从(255,281)移动到(77,281),移动(-178,0)
- 等级2:从(255,281)移动到(144,189),移动(-111,-92)
3. **独立回调函数**:每个动画有自己的完成回调
**扩展建议:**
如果你有更多等级需要不同的动画,可以继续添加:
```lua
elseif curlevel == 3 then
-- 第三个等级动画
-- 设置不同的目标位置
elseif curlevel == 4 then
-- 第四个等级动画
-- ...
```
这样每个等级都会有独立的动画路径,代码结构更清晰,也便于维护。
← 返回问答库