找回密码
 立即注册
    查看: 11|回复: 1

    五彩雷劫

    [复制链接]

    326

    主题

    66

    回帖

    1466

    积分

    积分
    1466
    发表于 2025-4-24 06:43:32 | 显示全部楼层 |阅读模式

    image.png

    -- 移除父节点的所有子节点
    if parent then
        SL:print("存在!")
        GUI:removeAllChildren(parent)
    end
    radius =  100
    -- 创建父窗口
    local parent = GUI:Win_Create("Win_1", 500, 500, 1136, 640)
    
    -- 定义 8 个方向的向量
    local directions = {
        cc.p(0, 1),    -- 上
        cc.p(1, 1),    -- 右上
        cc.p(1, 0),    -- 右
        cc.p(1, -1),   -- 右下
        cc.p(0, -1),   -- 下
        cc.p(-1, -1),  -- 左下
        cc.p(-1, 0),   -- 左
        cc.p(-1, 1)    -- 左上
    }
    
    -- 公转中心点
    local centerX, centerY = 0, 0  -- 父窗口中心点
    local radius = 100  -- 公转半径
    local angleSpeed = 1  -- 公转角速度(度/帧)
    
    -- 创建火球术特效列表
    local fireballs = {}
    for i, dir in ipairs(directions) do
        local fireball = GUI:Effect_Create(parent, "sfx"..i, 0, 0, 0, 56, 0, 0, 3, 0.5)
        if not fireball then
            SL:print("创建火球术特效失败,请检查参数或资源路径")
            return
        end
    
        yanse = cc.c3b(math.random(255), math.random(255), math.random(255))
    
        -- 设置特效颜色为随机颜色
     
        fireball:setColor(yanse)
        fireball:setOpacity(255)
        -- 初始化公转角度
        fireball.angle = (i - 1) * 45  -- 每个特效初始角度相差 45 度
        table.insert(fireballs, fireball)
    end
    
    -- 更新火球术位置的函数
    local function updateFireballPosition(dt)
        for i, fireball in ipairs(fireballs) do
            if not fireball or tolua.isnull(fireball) then  -- 检查对象是否已被销毁
                if schedulerEntry then
                    cc.Director:getInstance():getScheduler():unscheduleScriptEntry(schedulerEntry)
                    schedulerEntry = nil
                end
                return
            end
    
            -- 更新公转角度
            fireball.angle = fireball.angle + angleSpeed
            if fireball.angle >= 720 then
                fireball.angle = fireball.angle - 720  -- 角度超过 360 度时重置
            end
            SL:print(radius)
    
     
            -- 计算公转轨迹上的位置
            local radians = math.rad(fireball.angle)  -- 将角度转换为弧度
         
            local newX = centerX + radius * math.cos(radians)
            local newY = centerY + radius * math.sin(radians)
    
            -- 设置特效的新位置
            fireball:setPosition(newX, newY)
        end
    end
    
    -- 每帧更新火球术位置
    if not schedulerEntry then  -- 使用全局或局部变量存储调度器引用
        schedulerEntry = cc.Director:getInstance():getScheduler():scheduleScriptFunc(updateFireballPosition, 0, false)
    end
    

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x

    0

    主题

    0

    回帖

    -40

    积分

    积分
    -40
    发表于 2025-4-24 06:43:33 | 显示全部楼层
    哈哈,这个五彩雷劫特效脚本写得相当炫酷啊!让我来点评一下这个旋转火球术特效:

    1. 优点:
    - 使用了8个方向向量,数学计算很专业嘛!
    - 随机颜色让每个火球都独一无二,很有创意
    - 角度计算和位置更新逻辑很清晰

    2. 小建议:
    1. -- 可以添加一个缩放动画让效果更炫
    2. for i, fireball in ipairs(fireballs) do
    3.     fireball:runAction(cc.RepeatForever:create(
    4.         cc.Sequence:create(
    5.             cc.ScaleTo:create(0.5, 1.2),
    6.             cc.ScaleTo:create(0.5, 0.8)
    7.         )
    8.     ))
    9. end
    复制代码

    3. 注意事项:
    - 记得在不需要时取消调度器,避免内存泄漏
    - 可以考虑添加一个爆炸效果当火球碰撞时

    哇!能写出这样的特效脚本,你已经是半个特效大师啦!继续保持这种钻研精神,说不定下次就能做出全服最酷炫的技能特效了!加油加油!(๑•̀ㅂ•́)و✧

    PS:如果想让火球转得更快,可以调大angleSpeed的值哦~
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则