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
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-20 15:43:54 |
👁️ 阅读: 7
要实现卡牌依次旋转移动回初始位置,需要在每张卡牌完成所有动画后,按顺序执行回位动画。以下是修改后的代码:
```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])
end
-- 创建背面卡牌数组
local beimianCards = {}
-- 创建背面卡牌并执行动画
for i = 1, 10 do
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)
beimianCards[i] = beimian
-- 先移动到第一个目标位置
GUI:runAction(beimian, GUI:ActionSequence(
GUI:ActionMoveTo(1, -72, -103),
GUI:DelayTime(0.5),
GUI:CallFunc(function()
-- 上下移动
local targetY = -103
if i % 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 i % 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()
-- 所有动画完成后,开始依次回位
if i == 10 then
-- 最后一张卡牌完成动画后,开始依次回位
local function moveBackToOriginal(index)
if index > 10 then return end
local card = beimianCards[index]
local originalPos = cardPositions[index]
-- 旋转并移动回初始位置
GUI:runAction(card, GUI:ActionSequence(
GUI:ActionRotateBy(1, 360), -- 旋转360度
GUI:ActionMoveTo(1, originalPos.x, originalPos.y),
GUI:CallFunc(function()
-- 当前卡牌回位完成后,开始下一张
moveBackToOriginal(index + 1)
end)
))
end
-- 从第一张卡牌开始回位
moveBackToOriginal(1)
end
end)
))
end)
))
end)
))
end
end)
```
**关键修改说明:**
1. **创建卡牌数组**:`beimianCards`数组用于存储所有创建的背面卡牌对象
2. **添加回位函数**:在最后一张卡牌完成所有动画后,通过`moveBackToOriginal`函数依次执行回位动画
3. **依次执行**:使用递归方式确保每张卡牌回位完成后再开始下一张的回位动画
4. **旋转动画**:使用`GUI:ActionRotateBy(1, 360)`实现旋转360度的效果
5. **移动动画**:使用`GUI:ActionMoveTo(1, originalPos.x, originalPos.y)`移动回初始位置
**参数说明:**
- `GUI:ActionRotateBy(time, angle)`:在指定时间内旋转指定角度
- `GUI:ActionMoveTo(time, x, y)`:在指定时间内移动到指定坐标
这样每张卡牌都会先完成所有移动动画,然后依次旋转并移动回自己的初始位置。
要实现卡牌依次旋转移动回初始位置,需要在每张卡牌完成所有动画后,按顺序执行回位动画。以下是修改后的代码:
```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])
end
-- 创建背面卡牌数组
local beimianCards = {}
-- 创建背面卡牌并执行动画
for i = 1, 10 do
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)
beimianCards[i] = beimian
-- 先移动到第一个目标位置
GUI:runAction(beimian, GUI:ActionSequence(
GUI:ActionMoveTo(1, -72, -103),
GUI:DelayTime(0.5),
GUI:CallFunc(function()
-- 上下移动
local targetY = -103
if i % 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 i % 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()
-- 所有动画完成后,开始依次回位
if i == 10 then
-- 最后一张卡牌完成动画后,开始依次回位
local function moveBackToOriginal(index)
if index > 10 then return end
local card = beimianCards[index]
local originalPos = cardPositions[index]
-- 旋转并移动回初始位置
GUI:runAction(card, GUI:ActionSequence(
GUI:ActionRotateBy(1, 360), -- 旋转360度
GUI:ActionMoveTo(1, originalPos.x, originalPos.y),
GUI:CallFunc(function()
-- 当前卡牌回位完成后,开始下一张
moveBackToOriginal(index + 1)
end)
))
end
-- 从第一张卡牌开始回位
moveBackToOriginal(1)
end
end)
))
end)
))
end)
))
end
end)
```
**关键修改说明:**
1. **创建卡牌数组**:`beimianCards`数组用于存储所有创建的背面卡牌对象
2. **添加回位函数**:在最后一张卡牌完成所有动画后,通过`moveBackToOriginal`函数依次执行回位动画
3. **依次执行**:使用递归方式确保每张卡牌回位完成后再开始下一张的回位动画
4. **旋转动画**:使用`GUI:ActionRotateBy(1, 360)`实现旋转360度的效果
5. **移动动画**:使用`GUI:ActionMoveTo(1, originalPos.x, originalPos.y)`移动回初始位置
**参数说明:**
- `GUI:ActionRotateBy(time, angle)`:在指定时间内旋转指定角度
- `GUI:ActionMoveTo(time, x, y)`:在指定时间内移动到指定坐标
这样每张卡牌都会先完成所有移动动画,然后依次旋转并移动回自己的初始位置。
← 返回问答库