local function zhuanpan(msgID, msgData)
local screenWidth = SL:GetMetaValue("SCREEN_WIDTH", 0)
local screenHeight = SL:GetMetaValue("SCREEN_HEIGHT", 0)
local parent = GUI:Win_Create("zhuanpan", 0, 0, 0, 0, false, false, true, false,
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-20 15:12:37 |
👁️ 阅读: 13
看了你的代码,你想实现卡牌翻转后一边旋转一边回到初始位置的效果。不过你的代码里`ActionMoveTo`只移动位置,没有旋转动作,而且逻辑有点复杂嵌套。
根据浮生梦老师前端课程内容,要实现"一边旋转一边移动"的效果,应该使用`ActionSpawn`来同时执行多个动作。这里给你一个修正后的方案:
```lua
GUI:addOnClickEvent(ui.Button_1, function()
GUI:removeFromParent(ui.Button_1)
local cardPositions = {}
local cardSizes = {}
for i = 1, 10 do
local pos = GUI:getPosition(ui['Image_'..i])
local size = GUI:getContentSize(ui['Image_'..i])
cardPositions[i] = {x = pos.x, y = pos.y}
cardSizes[i] = {width = size.width, height = size.height}
GUI:removeFromParent(ui['Image_'..i])
local beimian = GUI:Button_Create(layout, "bei"..i, cardPositions[i].x, cardPositions[i].y, "res/public_win32/1900000610.png")
GUI:setContentSize(beimian, cardSizes[i].width, cardSizes[i].height)
GUI:setVisible(beimian, true)
-- 先移动到第一个目标位置
GUI:runAction(beimian, GUI:ActionSequence(
GUI:ActionMoveTo(1, -72, -103),
GUI:DelayTime(0.5),
GUI:CallFunc(function()
-- 计算Y方向目标位置
local targetY = -103
if i % 2 == 1 then
targetY = -103 + 172
else
targetY = -103 - 172
end
-- 同时执行移动和旋转(一边移动一边旋转)
local moveAction = GUI:ActionMoveTo(0.5, -72, targetY)
local rotateAction = GUI:ActionRotateBy(0.5, 360) -- 旋转360度
local spawnAction = GUI:ActionSpawn(moveAction, rotateAction)
GUI:runAction(beimian, GUI:ActionSequence(
spawnAction, -- 同时移动和旋转
GUI:DelayTime(0.3),
-- 再同时移动回来并旋转
GUI:ActionSpawn(
GUI:ActionMoveTo(0.5, -72, -103),
GUI:ActionRotateBy(0.5, 360)
),
GUI:DelayTime(0.5),
GUI:CallFunc(function()
-- 计算X方向目标位置
local targetX = -72
if i % 3 == 1 then
targetX = -72 - 142
else
targetX = -72 + 142
end
-- X方向移动时也同时旋转
GUI:runAction(beimian, GUI:ActionSequence(
GUI:ActionSpawn(
GUI:ActionMoveTo(0.5, targetX, -103),
GUI:ActionRotateBy(0.5, 360)
),
GUI:DelayTime(0.3),
GUI:ActionSpawn(
GUI:ActionMoveTo(0.5, -72, -103),
GUI:ActionRotateBy(0.5, 360)
)
))
end)
))
end)
))
end
end)
```
**主要修改点:**
1. 使用`ActionSpawn`来同时执行移动和旋转动作
2. 每个移动阶段都加上旋转动作`ActionRotateBy`
3. 旋转角度设为360度,这样移动过程中会完整旋转一圈
**注意:**
- `ActionSpawn`可以让多个动作同时执行
- `ActionRotateBy`是在当前角度基础上旋转
- 如果你想让旋转更平滑,可以调整旋转角度和时间
这样修改后,卡牌在移动过程中就会一边移动一边旋转,实现你想要的效果了!如果还有其他问题,随时问我哦~
← 返回问答库