User 7:04 AM
local function screenshot(msgID, p1, p2, p3, msgData)
-- 先找到父节点
if not msgData then return end
local data = SL:json2tbl(msgData) or {}
code
Code
local parent = GUI:Win_FindParent(110)
if GUI:Win_IsNull(parent) then
SL:Print("父节点不存在,
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-28 07:05:39 |
👁️ 阅读: 6
根据你的需求,我来帮你修改代码,实现全屏遮罩下让任务框外框(容器)有科技感的呼吸效果。
```lua
local function guidance()
-- 首先获取任务框父节点
local taskParent = GUI:Win_FindParent(110)
if not GUI:Win_IsNull(taskParent) then
-- 1. 创建全屏黑色遮罩层
local screenSize = SL:GetMetaValue("SCREEN_SIZE", "width")
local screenHeight = SL:GetMetaValue("SCREEN_SIZE", "height")
local maskLayer = GUI:Win_Create("TaskFocusMask", 0, 0, screenSize, screenHeight, false, false, true, false, false, false, 1)
GUI:setOpacity(maskLayer, 180) -- 设置半透明黑色
-- 2. 在遮罩层上挖空任务框区域
local taskPos = GUI:getPosition(taskParent)
local taskSize = GUI:getContentSize(taskParent)
-- 创建圆形或矩形挖空区域(这里用矩形示例)
local holeNode = GUI:Widget_Create(maskLayer, "hole_area", taskPos.x, taskPos.y, taskSize.width, taskSize.height)
GUI:setColor(holeNode, 255, 255, 255, 0) -- 完全透明
-- 3. 创建外框特效层(包裹任务框)
local frameWidth = 4 -- 外框厚度
local framePadding = 2 -- 外框与任务框的间距
-- 创建外框节点(比任务框稍大)
local outerFrame = GUI:Widget_Create(
maskLayer,
"tech_outer_frame",
taskPos.x - framePadding,
taskPos.y - framePadding,
taskSize.width + framePadding * 2,
taskSize.height + framePadding * 2
)
-- 设置外框为透明(只显示边框效果)
GUI:setOpacity(outerFrame, 0)
-- 4. 创建科技感外框效果(使用多个图层实现)
-- 创建发光边框(蓝色科技感)
local glowFrame = GUI:Widget_Create(outerFrame, "glow_frame", 0, 0,
taskSize.width + framePadding * 2,
taskSize.height + framePadding * 2)
GUI:setColor(glowFrame, 0, 200, 255, 180) -- 蓝色发光
-- 创建流动光效边框
local flowFrame = GUI:Widget_Create(outerFrame, "flow_frame", 0, 0,
taskSize.width + framePadding * 2,
taskSize.height + framePadding * 2)
GUI:setColor(flowFrame, 100, 255, 255, 150) -- 青色流动光
-- 5. 科技感呼吸动画
local function addTechBreathEffect()
-- 发光边框的呼吸效果
local glowFadeIn = GUI:ActionFadeTo(0.8, 220)
local glowFadeOut = GUI:ActionFadeTo(0.8, 120)
local glowScaleUp = GUI:ActionScaleTo(0.8, 1.02)
local glowScaleDown = GUI:ActionScaleTo(0.8, 0.98)
local glowSeq = GUI:ActionSequence(
GUI:ActionSpawn(glowFadeIn, glowScaleUp),
GUI:ActionSpawn(glowFadeOut, glowScaleDown),
GUI:DelayTime(0.3)
)
local glowRepeat = GUI:ActionRepeatForever(glowSeq)
GUI:runAction(glowFrame, glowRepeat)
-- 流动光效的呼吸效果(相位偏移,形成流动感)
local flowFadeIn = GUI:ActionFadeTo(0.6, 180)
local flowFadeOut = GUI:ActionFadeTo(0.6, 80)
local flowScaleUp = GUI:ActionScaleTo(0.6, 1.03)
local flowScaleDown = GUI:ActionScaleTo(0.6, 0.97)
local flowSeq = GUI:ActionSequence(
GUI:DelayTime(0.4), -- 延迟开始,形成相位差
GUI:ActionSpawn(flowFadeIn, flowScaleUp),
GUI:ActionSpawn(flowFadeOut, flowScaleDown),
GUI:DelayTime(0.2)
)
local flowRepeat = GUI:ActionRepeatForever(flowSeq)
GUI:runAction(flowFrame, flowRepeat)
-- 外框整体的轻微脉动
local outerPulseUp = GUI:ActionScaleTo(1.2, 1.01)
local outerPulseDown = GUI:ActionScaleTo(1.2, 1.0)
local outerSeq = GUI:ActionSequence(
outerPulseUp,
outerPulseDown,
GUI:DelayTime(0.5)
)
local outerRepeat = GUI:ActionRepeatForever(outerSeq)
GUI:runAction(outerFrame, outerRepeat)
end
-- 6. 启动科技感呼吸效果
addTechBreathEffect()
-- 7. 设置遮罩层层级(确保在最上层)
GUI:setLocalZOrder(maskLayer, 9999)
-- 8. 添加点击遮罩关闭功能
GUI:addOnClickEvent(maskLayer, function()
-- 停止所有动画
GUI:stopAllActions(glowFrame)
GUI:stopAllActions(flowFrame)
GUI:stopAllActions(outerFrame)
-- 移除遮罩层
GUI:removeFromParent(maskLayer)
SL:print("任务聚焦效果已关闭")
end)
SL:print("科技感任务聚焦效果已开启,点击任意位置关闭")
else
SL:print("未找到任务框父节点")
end
end
SL:RegisterLuaNetMsg(8889, guidance)
```
**修改说明:**
1. **创建外框容器**:在遮罩层上创建了一个比任务框稍大的`outerFrame`容器
2. **多层科技感效果**:
- `glowFrame`:蓝色发光边框,主呼吸效果
- `flowFrame`:青色流动光效,相位偏移形成流动感
3. **复合呼吸动画**:
- 发光边框:透明度+缩放同时变化
- 流动光效:延迟启动,形成相位差
- 外框整体:轻微脉动效果
4. **科技感颜色**:使用了蓝色系(0,200,255)和青色系(100,255,255)
5. **点击关闭**:点击遮罩层会停止所有动画并移除效果
**效果特点:**
- 外框独立于任务框,不会影响内部组件
- 多层动画叠加,形成科技感的动态效果
- 蓝色系配色符合科技感主题
- 相位差的流动效果增强视觉层次
这样修改后,任务框外框会有很酷的科技感呼吸效果!
根据你的需求,我来帮你修改代码,实现全屏遮罩下让任务框外框(容器)有科技感的呼吸效果。
```lua
local function guidance()
-- 首先获取任务框父节点
local taskParent = GUI:Win_FindParent(110)
if not GUI:Win_IsNull(taskParent) then
-- 1. 创建全屏黑色遮罩层
local screenSize = SL:GetMetaValue("SCREEN_SIZE", "width")
local screenHeight = SL:GetMetaValue("SCREEN_SIZE", "height")
local maskLayer = GUI:Win_Create("TaskFocusMask", 0, 0, screenSize, screenHeight, false, false, true, false, false, false, 1)
GUI:setOpacity(maskLayer, 180) -- 设置半透明黑色
-- 2. 在遮罩层上挖空任务框区域
local taskPos = GUI:getPosition(taskParent)
local taskSize = GUI:getContentSize(taskParent)
-- 创建圆形或矩形挖空区域(这里用矩形示例)
local holeNode = GUI:Widget_Create(maskLayer, "hole_area", taskPos.x, taskPos.y, taskSize.width, taskSize.height)
GUI:setColor(holeNode, 255, 255, 255, 0) -- 完全透明
-- 3. 创建外框特效层(包裹任务框)
local frameWidth = 4 -- 外框厚度
local framePadding = 2 -- 外框与任务框的间距
-- 创建外框节点(比任务框稍大)
local outerFrame = GUI:Widget_Create(
maskLayer,
"tech_outer_frame",
taskPos.x - framePadding,
taskPos.y - framePadding,
taskSize.width + framePadding * 2,
taskSize.height + framePadding * 2
)
-- 设置外框为透明(只显示边框效果)
GUI:setOpacity(outerFrame, 0)
-- 4. 创建科技感外框效果(使用多个图层实现)
-- 创建发光边框(蓝色科技感)
local glowFrame = GUI:Widget_Create(outerFrame, "glow_frame", 0, 0,
taskSize.width + framePadding * 2,
taskSize.height + framePadding * 2)
GUI:setColor(glowFrame, 0, 200, 255, 180) -- 蓝色发光
-- 创建流动光效边框
local flowFrame = GUI:Widget_Create(outerFrame, "flow_frame", 0, 0,
taskSize.width + framePadding * 2,
taskSize.height + framePadding * 2)
GUI:setColor(flowFrame, 100, 255, 255, 150) -- 青色流动光
-- 5. 科技感呼吸动画
local function addTechBreathEffect()
-- 发光边框的呼吸效果
local glowFadeIn = GUI:ActionFadeTo(0.8, 220)
local glowFadeOut = GUI:ActionFadeTo(0.8, 120)
local glowScaleUp = GUI:ActionScaleTo(0.8, 1.02)
local glowScaleDown = GUI:ActionScaleTo(0.8, 0.98)
local glowSeq = GUI:ActionSequence(
GUI:ActionSpawn(glowFadeIn, glowScaleUp),
GUI:ActionSpawn(glowFadeOut, glowScaleDown),
GUI:DelayTime(0.3)
)
local glowRepeat = GUI:ActionRepeatForever(glowSeq)
GUI:runAction(glowFrame, glowRepeat)
-- 流动光效的呼吸效果(相位偏移,形成流动感)
local flowFadeIn = GUI:ActionFadeTo(0.6, 180)
local flowFadeOut = GUI:ActionFadeTo(0.6, 80)
local flowScaleUp = GUI:ActionScaleTo(0.6, 1.03)
local flowScaleDown = GUI:ActionScaleTo(0.6, 0.97)
local flowSeq = GUI:ActionSequence(
GUI:DelayTime(0.4), -- 延迟开始,形成相位差
GUI:ActionSpawn(flowFadeIn, flowScaleUp),
GUI:ActionSpawn(flowFadeOut, flowScaleDown),
GUI:DelayTime(0.2)
)
local flowRepeat = GUI:ActionRepeatForever(flowSeq)
GUI:runAction(flowFrame, flowRepeat)
-- 外框整体的轻微脉动
local outerPulseUp = GUI:ActionScaleTo(1.2, 1.01)
local outerPulseDown = GUI:ActionScaleTo(1.2, 1.0)
local outerSeq = GUI:ActionSequence(
outerPulseUp,
outerPulseDown,
GUI:DelayTime(0.5)
)
local outerRepeat = GUI:ActionRepeatForever(outerSeq)
GUI:runAction(outerFrame, outerRepeat)
end
-- 6. 启动科技感呼吸效果
addTechBreathEffect()
-- 7. 设置遮罩层层级(确保在最上层)
GUI:setLocalZOrder(maskLayer, 9999)
-- 8. 添加点击遮罩关闭功能
GUI:addOnClickEvent(maskLayer, function()
-- 停止所有动画
GUI:stopAllActions(glowFrame)
GUI:stopAllActions(flowFrame)
GUI:stopAllActions(outerFrame)
-- 移除遮罩层
GUI:removeFromParent(maskLayer)
SL:print("任务聚焦效果已关闭")
end)
SL:print("科技感任务聚焦效果已开启,点击任意位置关闭")
else
SL:print("未找到任务框父节点")
end
end
SL:RegisterLuaNetMsg(8889, guidance)
```
**修改说明:**
1. **创建外框容器**:在遮罩层上创建了一个比任务框稍大的`outerFrame`容器
2. **多层科技感效果**:
- `glowFrame`:蓝色发光边框,主呼吸效果
- `flowFrame`:青色流动光效,相位偏移形成流动感
3. **复合呼吸动画**:
- 发光边框:透明度+缩放同时变化
- 流动光效:延迟启动,形成相位差
- 外框整体:轻微脉动效果
4. **科技感颜色**:使用了蓝色系(0,200,255)和青色系(100,255,255)
5. **点击关闭**:点击遮罩层会停止所有动画并移除效果
**效果特点:**
- 外框独立于任务框,不会影响内部组件
- 多层动画叠加,形成科技感的动态效果
- 蓝色系配色符合科技感主题
- 相位差的流动效果增强视觉层次
这样修改后,任务框外框会有很酷的科技感呼吸效果!
← 返回问答库