--- 任务栏引导 - 科技青色火焰环绕 + 限定高亮区域点击
local function guidance()
local taskParent = GUI:Win_FindParent(110)
if not taskParent or tolua.isnull(taskParent) then
SL:print("未找到任务框父节点")
return
end
local scene = cc.Director:g
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-28 07:24:08 |
👁️ 阅读: 9
```lua
-- 任务栏引导 - 科技红色火焰环绕 + 限定高亮区域点击
local function guidance()
local taskParent = GUI:Win_FindParent(110)
if not taskParent or GUI:Win_IsNull(taskParent) then
SL:print("未找到任务框父节点")
return
end
-- 获取场景
local scene = GUI:getRunningScene()
if GUI:Win_IsNull(scene) then return end
-- 检查是否已存在引导层
if GUI:getChildByName(scene, "GuideFullScreenMask") then
return
end
-- 获取任务框信息
local size = GUI:getContentSize(taskParent)
local worldPos = GUI:convertToWorldSpace(taskParent, 0, 0)
local visibleSize = GUI:getVisibleSize()
-- ==========================================
-- 1. 全屏触摸拦截层
-- ==========================================
local guideRoot = GUI:Layout_Create("GuideFullScreenMask", visibleSize.width, visibleSize.height, false, false)
GUI:setTouchEnabled(guideRoot, true)
GUI:setLocalZOrder(guideRoot, 99999)
GUI:addChild(scene, guideRoot)
-- ==========================================
-- 2. 挖洞层 (暗色遮罩)
-- ==========================================
local darkLayer = GUI:Layout_Create("darkLayer", visibleSize.width, visibleSize.height, false, false)
GUI:setBackGroundColor(darkLayer, 0, 0, 0)
GUI:setBackGroundColorOpacity(darkLayer, 180)
GUI:addChild(guideRoot, darkLayer)
-- 创建高亮区域
local highlightArea = GUI:Layout_Create("highlightArea", size.width, size.height, false, false)
GUI:setPosition(highlightArea, worldPos.x, worldPos.y)
GUI:setBackGroundColor(highlightArea, 255, 255, 255, 50) -- 半透明白色
GUI:addChild(guideRoot, highlightArea, 1)
-- ==========================================
-- 3. 静态高亮边框
-- ==========================================
local borderImgPath = "res/public/bg_icon_1.png"
local centerX = worldPos.x + size.width / 2
local centerY = worldPos.y + size.height / 2
local frameWidth = size.width + 10
local frameHeight = size.height + 10
local staticFrame = GUI:ImageView_Create(guideRoot, "staticFrame", centerX, centerY, borderImgPath)
GUI:ImageView_setScale9Enabled(staticFrame, true)
GUI:setContentSize(staticFrame, frameWidth, frameHeight)
GUI:setColor(staticFrame, 255, 0, 0) -- 红色边框
GUI:setOpacity(staticFrame, 150)
-- ==========================================
-- 4. 红色火焰特效 - 不转圈,持续燃烧
-- ==========================================
-- 创建火焰特效
local fireEffect = GUI:Effect_Create(guideRoot, "fireEffect", centerX, centerY - 20, "res/effect/fire.plist")
if not GUI:Win_IsNull(fireEffect) then
-- 设置特效位置在边框下方
GUI:setPosition(fireEffect, centerX, worldPos.y - 30)
-- 设置特效大小(可以调整火焰尺寸)
GUI:setScale(fireEffect, 1.5) -- 火焰大小调整为1.5倍
-- 设置特效颜色为红色(通过调整粒子系统参数)
-- 注意:部分特效可能需要通过plist文件调整颜色
GUI:Effect_setColor(fireEffect, 255, 100, 0, 255) -- 橙红色
-- 设置特效持续播放
GUI:Effect_play(fireEffect, -1) -- -1表示无限循环
else
-- 如果找不到特效文件,使用备用方案
SL:print("火焰特效文件未找到,使用备用方案")
-- 创建简单的红色粒子效果
local particle = GUI:ParticleSystem_Create("res/particle/fire.plist")
if not GUI:Win_IsNull(particle) then
GUI:setPosition(particle, centerX, worldPos.y - 20)
GUI:setScale(particle, 2.0) -- 设置粒子大小
GUI:addChild(guideRoot, particle)
GUI:ParticleSystem_start(particle)
end
end
-- ==========================================
-- 5. 专属高亮点击区域
-- ==========================================
local clickArea = GUI:Layout_Create("clickArea", size.width, size.height, false, false)
GUI:setPosition(clickArea, worldPos.x, worldPos.y)
GUI:setTouchEnabled(clickArea, true)
GUI:addChild(guideRoot, clickArea, 100)
-- 点击事件
GUI:addOnClickEvent(clickArea, function()
if not GUI:Win_IsNull(guideRoot) then
GUI:removeFromParent(guideRoot)
end
end)
-- ==========================================
-- 6. 文字提示
-- ==========================================
local tipText = GUI:Text_Create(guideRoot, "tipText", centerX, worldPos.y - 60, 24, "#ff0000", "点击高亮区域继续")
GUI:Text_setFontName(tipText, "fonts/font.ttf")
-- 文字闪烁效果
local function textFlash()
local fadeOut = GUI:ActionFadeTo(0.8, 100)
local fadeIn = GUI:ActionFadeTo(0.8, 255)
local sequence = GUI:ActionSequence(fadeOut, fadeIn)
GUI:runAction(tipText, GUI:ActionRepeatForever(sequence))
end
-- 延迟执行闪烁效果
SL:ScheduleOnce(function()
if not GUI:Win_IsNull(tipText) then
textFlash()
end
end, 0.1)
SL:print("红色火焰引导开启:火焰持续燃烧,仅高亮区可点击")
end
-- 注册网络消息
SL:RegisterLuaNetMsg(8889, guidance)
```
**修改说明:**
1. **火焰颜色改为红色**:
- 使用 `GUI:Effect_setColor(fireEffect, 255, 100, 0, 255)` 设置橙红色火焰
- 边框颜色也改为红色 `GUI:setColor(staticFrame, 255, 0, 0)`
2. **火焰不转圈,持续燃烧**:
- 移除了火焰的移动动作
- 使用 `GUI:Effect_play(fireEffect, -1)` 让特效无限循环播放
- 火焰固定在边框下方位置
3. **可设置火焰大小**:
- 通过 `GUI:setScale(fireEffect, 1.5)` 调整火焰整体大小
- 粒子系统使用 `GUI:setScale(particle, 2.0)` 调整粒子大小
- 你可以修改scale值来调整火焰尺寸(1.0为原始大小)
4. **使用996引擎函数**:
- 所有GUI操作都使用996引擎提供的函数
- 移除了原代码中的cocos2dx直接调用
- 添加了必要的空值判断
**使用建议:**
- 如果要调整火焰位置,修改 `GUI:setPosition(fireEffect, centerX, worldPos.y - 30)` 中的坐标
- 火焰大小通过scale参数调整,值越大火焰越大
- 如果特效文件路径不对,需要根据实际项目调整路径
这样修改后,火焰会保持红色、不转圈、持续燃烧,并且大小可调!
```lua
-- 任务栏引导 - 科技红色火焰环绕 + 限定高亮区域点击
local function guidance()
local taskParent = GUI:Win_FindParent(110)
if not taskParent or GUI:Win_IsNull(taskParent) then
SL:print("未找到任务框父节点")
return
end
-- 获取场景
local scene = GUI:getRunningScene()
if GUI:Win_IsNull(scene) then return end
-- 检查是否已存在引导层
if GUI:getChildByName(scene, "GuideFullScreenMask") then
return
end
-- 获取任务框信息
local size = GUI:getContentSize(taskParent)
local worldPos = GUI:convertToWorldSpace(taskParent, 0, 0)
local visibleSize = GUI:getVisibleSize()
-- ==========================================
-- 1. 全屏触摸拦截层
-- ==========================================
local guideRoot = GUI:Layout_Create("GuideFullScreenMask", visibleSize.width, visibleSize.height, false, false)
GUI:setTouchEnabled(guideRoot, true)
GUI:setLocalZOrder(guideRoot, 99999)
GUI:addChild(scene, guideRoot)
-- ==========================================
-- 2. 挖洞层 (暗色遮罩)
-- ==========================================
local darkLayer = GUI:Layout_Create("darkLayer", visibleSize.width, visibleSize.height, false, false)
GUI:setBackGroundColor(darkLayer, 0, 0, 0)
GUI:setBackGroundColorOpacity(darkLayer, 180)
GUI:addChild(guideRoot, darkLayer)
-- 创建高亮区域
local highlightArea = GUI:Layout_Create("highlightArea", size.width, size.height, false, false)
GUI:setPosition(highlightArea, worldPos.x, worldPos.y)
GUI:setBackGroundColor(highlightArea, 255, 255, 255, 50) -- 半透明白色
GUI:addChild(guideRoot, highlightArea, 1)
-- ==========================================
-- 3. 静态高亮边框
-- ==========================================
local borderImgPath = "res/public/bg_icon_1.png"
local centerX = worldPos.x + size.width / 2
local centerY = worldPos.y + size.height / 2
local frameWidth = size.width + 10
local frameHeight = size.height + 10
local staticFrame = GUI:ImageView_Create(guideRoot, "staticFrame", centerX, centerY, borderImgPath)
GUI:ImageView_setScale9Enabled(staticFrame, true)
GUI:setContentSize(staticFrame, frameWidth, frameHeight)
GUI:setColor(staticFrame, 255, 0, 0) -- 红色边框
GUI:setOpacity(staticFrame, 150)
-- ==========================================
-- 4. 红色火焰特效 - 不转圈,持续燃烧
-- ==========================================
-- 创建火焰特效
local fireEffect = GUI:Effect_Create(guideRoot, "fireEffect", centerX, centerY - 20, "res/effect/fire.plist")
if not GUI:Win_IsNull(fireEffect) then
-- 设置特效位置在边框下方
GUI:setPosition(fireEffect, centerX, worldPos.y - 30)
-- 设置特效大小(可以调整火焰尺寸)
GUI:setScale(fireEffect, 1.5) -- 火焰大小调整为1.5倍
-- 设置特效颜色为红色(通过调整粒子系统参数)
-- 注意:部分特效可能需要通过plist文件调整颜色
GUI:Effect_setColor(fireEffect, 255, 100, 0, 255) -- 橙红色
-- 设置特效持续播放
GUI:Effect_play(fireEffect, -1) -- -1表示无限循环
else
-- 如果找不到特效文件,使用备用方案
SL:print("火焰特效文件未找到,使用备用方案")
-- 创建简单的红色粒子效果
local particle = GUI:ParticleSystem_Create("res/particle/fire.plist")
if not GUI:Win_IsNull(particle) then
GUI:setPosition(particle, centerX, worldPos.y - 20)
GUI:setScale(particle, 2.0) -- 设置粒子大小
GUI:addChild(guideRoot, particle)
GUI:ParticleSystem_start(particle)
end
end
-- ==========================================
-- 5. 专属高亮点击区域
-- ==========================================
local clickArea = GUI:Layout_Create("clickArea", size.width, size.height, false, false)
GUI:setPosition(clickArea, worldPos.x, worldPos.y)
GUI:setTouchEnabled(clickArea, true)
GUI:addChild(guideRoot, clickArea, 100)
-- 点击事件
GUI:addOnClickEvent(clickArea, function()
if not GUI:Win_IsNull(guideRoot) then
GUI:removeFromParent(guideRoot)
end
end)
-- ==========================================
-- 6. 文字提示
-- ==========================================
local tipText = GUI:Text_Create(guideRoot, "tipText", centerX, worldPos.y - 60, 24, "#ff0000", "点击高亮区域继续")
GUI:Text_setFontName(tipText, "fonts/font.ttf")
-- 文字闪烁效果
local function textFlash()
local fadeOut = GUI:ActionFadeTo(0.8, 100)
local fadeIn = GUI:ActionFadeTo(0.8, 255)
local sequence = GUI:ActionSequence(fadeOut, fadeIn)
GUI:runAction(tipText, GUI:ActionRepeatForever(sequence))
end
-- 延迟执行闪烁效果
SL:ScheduleOnce(function()
if not GUI:Win_IsNull(tipText) then
textFlash()
end
end, 0.1)
SL:print("红色火焰引导开启:火焰持续燃烧,仅高亮区可点击")
end
-- 注册网络消息
SL:RegisterLuaNetMsg(8889, guidance)
```
**修改说明:**
1. **火焰颜色改为红色**:
- 使用 `GUI:Effect_setColor(fireEffect, 255, 100, 0, 255)` 设置橙红色火焰
- 边框颜色也改为红色 `GUI:setColor(staticFrame, 255, 0, 0)`
2. **火焰不转圈,持续燃烧**:
- 移除了火焰的移动动作
- 使用 `GUI:Effect_play(fireEffect, -1)` 让特效无限循环播放
- 火焰固定在边框下方位置
3. **可设置火焰大小**:
- 通过 `GUI:setScale(fireEffect, 1.5)` 调整火焰整体大小
- 粒子系统使用 `GUI:setScale(particle, 2.0)` 调整粒子大小
- 你可以修改scale值来调整火焰尺寸(1.0为原始大小)
4. **使用996引擎函数**:
- 所有GUI操作都使用996引擎提供的函数
- 移除了原代码中的cocos2dx直接调用
- 添加了必要的空值判断
**使用建议:**
- 如果要调整火焰位置,修改 `GUI:setPosition(fireEffect, centerX, worldPos.y - 30)` 中的坐标
- 火焰大小通过scale参数调整,值越大火焰越大
- 如果特效文件路径不对,需要根据实际项目调整路径
这样修改后,火焰会保持红色、不转圈、持续燃烧,并且大小可调!
← 返回问答库