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] =
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-20 15:19:48 |
👁️ 阅读: 8
```lua
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])
end
-- 创建背面卡牌并执行动画
local function playCardAnimation(index)
if index > 10 then return end
local beimian = GUI:Button_Create(layout, "bei"..index, cardPositions[index].x, cardPositions[index].y, "res/public_win32/1900000610.png")
GUI:setContentSize(beimian, cardSizes[index].width, cardSizes[index].height)
GUI:setVisible(beimian, true)
-- 先移动到第一个目标位置
GUI:runAction(beimian, GUI:ActionSequence(
GUI:ActionMoveTo(1, -72, -103),
GUI:DelayTime(0.5),
GUI:CallFunc(function()
-- 上下移动
local targetY = -103
if index % 2 == 1 then
targetY = -103 + 172
else
targetY = -103 - 172
end
GUI:runAction(beimian, GUI:ActionSequence(
GUI:ActionMoveTo(0.5, -72, targetY),
GUI:DelayTime(0.3),
GUI:ActionMoveTo(0.5, -72, -103),
GUI:DelayTime(0.5),
GUI:CallFunc(function()
-- 左右移动
local targetX = -72
if index % 3 == 1 then
targetX = -72 - 142
else
targetX = -72 + 142
end
GUI:runAction(beimian, GUI:ActionSequence(
GUI:ActionMoveTo(0.5, targetX, -103),
GUI:DelayTime(0.3),
GUI:ActionMoveTo(0.5, -72, -103),
GUI:DelayTime(0.5),
GUI:CallFunc(function()
-- 最后旋转并回到初始位置(0.3秒内)
GUI:runAction(beimian, GUI:ActionSequence(
GUI:ActionSpawn(
GUI:ActionMoveTo(0.3, cardPositions[index].x, cardPositions[index].y),
GUI:ActionRotateBy(0.3, 360) -- 旋转360度
),
GUI:CallFunc(function()
-- 当前卡牌动画完成,播放下一个
SL:ScheduleOnce(function()
playCardAnimation(index + 1)
end, 0.1) -- 延迟0.1秒开始下一张
end)
))
end)
))
end)
))
end)
))
end
-- 开始第一张卡牌动画
playCardAnimation(1)
```
**修改说明:**
1. **改为顺序播放**:将动画逻辑封装到`playCardAnimation`函数中,通过递归调用实现顺序播放
2. **添加延迟触发**:使用`SL:ScheduleOnce`在每个卡牌动画完成后延迟0.1秒播放下一个
3. **保持原有动画流程**:保留了所有原有的移动、旋转效果,只是调整了播放顺序
这样修改后,10张卡牌会一张接一张地执行动画,形成发牌效果。每张卡牌完成所有动画后,才会开始下一张的动画。
```lua
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])
end
-- 创建背面卡牌并执行动画
local function playCardAnimation(index)
if index > 10 then return end
local beimian = GUI:Button_Create(layout, "bei"..index, cardPositions[index].x, cardPositions[index].y, "res/public_win32/1900000610.png")
GUI:setContentSize(beimian, cardSizes[index].width, cardSizes[index].height)
GUI:setVisible(beimian, true)
-- 先移动到第一个目标位置
GUI:runAction(beimian, GUI:ActionSequence(
GUI:ActionMoveTo(1, -72, -103),
GUI:DelayTime(0.5),
GUI:CallFunc(function()
-- 上下移动
local targetY = -103
if index % 2 == 1 then
targetY = -103 + 172
else
targetY = -103 - 172
end
GUI:runAction(beimian, GUI:ActionSequence(
GUI:ActionMoveTo(0.5, -72, targetY),
GUI:DelayTime(0.3),
GUI:ActionMoveTo(0.5, -72, -103),
GUI:DelayTime(0.5),
GUI:CallFunc(function()
-- 左右移动
local targetX = -72
if index % 3 == 1 then
targetX = -72 - 142
else
targetX = -72 + 142
end
GUI:runAction(beimian, GUI:ActionSequence(
GUI:ActionMoveTo(0.5, targetX, -103),
GUI:DelayTime(0.3),
GUI:ActionMoveTo(0.5, -72, -103),
GUI:DelayTime(0.5),
GUI:CallFunc(function()
-- 最后旋转并回到初始位置(0.3秒内)
GUI:runAction(beimian, GUI:ActionSequence(
GUI:ActionSpawn(
GUI:ActionMoveTo(0.3, cardPositions[index].x, cardPositions[index].y),
GUI:ActionRotateBy(0.3, 360) -- 旋转360度
),
GUI:CallFunc(function()
-- 当前卡牌动画完成,播放下一个
SL:ScheduleOnce(function()
playCardAnimation(index + 1)
end, 0.1) -- 延迟0.1秒开始下一张
end)
))
end)
))
end)
))
end)
))
end
-- 开始第一张卡牌动画
playCardAnimation(1)
```
**修改说明:**
1. **改为顺序播放**:将动画逻辑封装到`playCardAnimation`函数中,通过递归调用实现顺序播放
2. **添加延迟触发**:使用`SL:ScheduleOnce`在每个卡牌动画完成后延迟0.1秒播放下一个
3. **保持原有动画流程**:保留了所有原有的移动、旋转效果,只是调整了播放顺序
这样修改后,10张卡牌会一张接一张地执行动画,形成发牌效果。每张卡牌完成所有动画后,才会开始下一张的动画。
← 返回问答库