CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
进阶实战游戏功能996引擎

走马灯:灯轮转动幕幕成戏

2026-09-29 01:25 作者:996 技术组 996引擎Lua教程传奇脚本进阶实战游戏功能996引擎

【游戏功能】

走马灯是靠"转"讲故事的:灯轮一转,纸屏绕行,幕后烛光把影人投在屏上——幕幕轮换,戏就一折接一折。今天拆走马灯的表现,看"旋转"怎么把四个独立的故事串成一台戏。

一、灯轮、纸屏、影人三层结构

走马灯的结构三层。灯轮层:灯轮的旋转是全套的动力,转速滑块决定纸屏绕行的速度——灯轮是发动机,纸屏是车轮,影人是乘客。纸屏层:四面纸屏等分圆周绕轴旋转,纸屏离观众近时正对、远时侧对——纸屏的宽度和透明度随旋转深度变化,正面宽而不透明,侧面窄而半透明——深浅变化就是纸屏的"远近感"。影人层:每面纸屏上一个影人剪影,四个影人四个故事——武松打虎、嫦娥奔月、关公千里、穆桂英挂帅。三层的联动是走马灯的灵魂:灯轮转动带着纸屏绕行,纸屏绕行带着影人轮换——幕幕成戏,转就是叙事。

完整演示在这,默认自动循环:

demo
 fx-zoudeng

二、幂尔框架实现:深度排序与透明度联动

纸屏按旋转角算深度,深度决定宽度、透明度和遮挡关系:

lua
local ZouDeng = {}
local KEY = { PANELS = 4, RADIUS = 66 }

local ang, act = 0, 1

function ZD.Spin()
    SL:SetValue("spinning", true)
    SL:Schedule(function(dt)
        if not SL:GetValue("spinning") then SL:UnSchedule("zdRun") return end
        local spd = SL:GetValue("spinSpeed") or 50
        ang = ang + spd / 100 * 2.4 * dt
        -- 转满一圈: 换一幕
        if ang >= 6.28 then
            ang = ang - 6.28
            act = act % 4 + 1
            SL:ShowSystemTips("灯影轮换 · " .. SL:GetValue("actName", act))
        end
        -- 四面纸屏按深度排序后渲染
        local panels = {}
        for i = 1, KEY.PANELS do
            local a = ang + i / KEY.PANELS * 6.28
            panels[#panels + 1] = {
                i = i, depth = (math.cos(a) + 1) / 2, a = a
            }
        end
        table.sort(panels, function(x, y) return x.depth < y.depth end)
        for _, p in ipairs(panels) do
            local px = SL:GetValue("lampX") + math.sin(p.a) * KEY.RADIUS
            local alpha = 0.35 + p.depth * 0.5
            local w = 30 + p.depth * 26
            SL:DrawPanel(px, 160, w, 124, alpha,
                         SL:GetValue("actName", p.i))
        end
    end, 0.016, "zdRun")
end

return ZD

纸屏按深度从小到大排序渲染——远的先画近的后画,遮挡关系自动正确。

三、深度透明度与影人的演出

纸屏的透明度随深度联动:正面不透明、侧面半透——半透明的侧面纸屏能透出背后的影人,走马灯的"透"就是靠这层透明度。影人的剪影姿势按幕切换:武松举拳、嫦娥抬袖、关公横刀、穆桂英抖枪——姿势和故事对上,剪影才有戏文。灯轮的烛光是全套的光源:烛光的光晕从灯轮中心向四周渐弱,纸屏上的影人是被烛光照亮的——光源的位置决定影人的朝向,影人永远面向光源。最后,走马灯的转速滑块是气氛的节拍器:慢转是听书,快转是看戏——转速滑到最快时四幕轮换快到数不清,反而有了"万花筒"的迷幻感。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

进阶实战游戏功能

威压诀:站得够近,它的刀就软

【游戏功能】 威压诀的全机制就一句:把气提到刀上,脚下荡开一圈威压场——圈里的怪刀软一半、出手慢半拍,你的刀对它加五成;怪不…

2026-10-01 03:33 996 技术组
进阶实战游戏功能

焚祭:烧了自己的犬,换十秒火刀

【游戏功能】 vd = hot and base 2 or base ——一行两倍的乘法,藏在焚祭全部的痛感里:刀翻倍的代价…

2026-10-01 03:33 996 技术组
进阶实战游戏功能

舍身盾:致命一刀下来,它替你扛了

【游戏功能】 大怪蓄力蓄到发亮的那一发重击,凭什么有信心接下来?多数玩家的答案是"闪",可闪有冷却、有前摇、有失误——舍身盾…

2026-10-01 03:33 996 技术组
进阶实战游戏功能

吸血虫:一只虫咬在身上,拍它要停手一拍

【游戏功能】 战斗组翻到一笔没人认领的异常:玩家的血条在没有挨打记录的情况下稳定下滑,一秒四点,战斗日志里攻击来源是空的。排…

2026-10-01 03:33 996 技术组
进阶实战游戏功能

沙漏阵:沙漏里的刀软,沙漏外的刀疯

【游戏功能】 数值组翻过一笔扯皮的账:同一只头目,A 队三分钟放倒,B 队磨了十一分钟还灭了——装备差不到一成,输出差了一倍…

2026-10-01 03:33 996 技术组
进阶实战游戏功能

借刀符:一张符贴上去,它的爪听我的

【游戏功能】 借刀符的全机制就一句:一张符掷中谁,谁就中招六秒——六秒里它的爪听你的,转身撕咬自己人,符效一过它回过神来第一…

2026-10-01 03:33 996 技术组