【游戏功能】
火折子是古代的手电筒:吹口气火苗窜起照亮夜路——吹一口气就能复燃的火种,是古代人随身携带的光。今天拆火折子的表现,看"复燃"这个动作怎么做出夜路的温度感。
一、吹气、复燃、照亮三段点亮
火折子的点亮三段。吹气段:对着封存的火折子吹口气,纸卷里的火种被氧气激发——吹气的动作是全场的按钮:按一下,火就活了。复燃段:火苗从纸卷顶部窜起,从暗到亮的渐变——复燃的渐变是火折子的灵魂:火苗不是瞬间满高,是从火种慢慢长到满高。照亮段:火苗照亮周围一圈的夜路——光晕的半径就是火折子的照明范围,光晕的暖色是火折子的温度感。三段的核心是"从无到有":火苗从零到满高的生长过程就是火折子的演出,生长的速率就是它的性格。
完整演示在这,点吹口气:
fx-firestick
二、幂尔框架实现:火苗生长与光晕半径
火苗高度按时间从零长到满高,光晕跟着火苗走:
local FireStick = {}
local KEY = { GROW = 40 }
local lit, flameH = false, 0
local fx, fy = 330, 170
function FS.Blow()
if lit then return end
lit = true
flameH = 5
SL:PlaySfx("blow_fire")
SL:PlayBurst(fx, fy - 20, "fire_spark", 8)
-- 火苗生长: 从火种到满高
SL:Schedule(function(dt)
if not lit then SL:UnSchedule("flameGrow") return end
flameH = math.min(60, flameH + KEY.GROW * dt)
SL:SetFxSize("flame", 10, flameH)
SL:SetFxPos("flame", fx + math.sin(SL:GetValue("engineTime") * 8) * 4,
fy - flameH / 2)
if flameH >= 60 then SL:UnSchedule("flameGrow") end
end, 0.016, "flameGrow")
end
function FS.Render()
if not lit then return end
-- 火苗光晕: 暖色径向渐变
SL:DrawGlow(fx, fy - flameH / 2, flameH, "warm")
-- 火折子纸卷
SL:DrawRect(fx - 7, fy, 14, 90, "#8a5a2a")
-- 摇曳的火苗偏移
local sway = math.sin(SL:GetValue("engineTime") * 8) * 4
SL:DrawFlame(fx + sway, fy - flameH / 2, flameH)
end
return FS
光晕的半径跟火苗高度同步——火苗多高光晕多大,光晕是火苗的影子。
三、光晕半径与夜路的温度
光晕的暖色是火折子的温度感:暖色的径向渐变从中心的暖白到边缘的透明橙——冷色底上一圈暖色光晕,夜路的温度感就出来了。摇曳的火苗是"活"的证据:火苗的偏移量随正弦波摇摆——不摇的火苗像灯泡,摇的火苗才是火。火折子的纸卷分三层:纸卷的颜色棕黄分三层渐变——单色的纸卷像木棍,分层的才像卷纸。最后,光晕里的夜路要若隐若现:光晕照到的地方隐约可见路面纹理——火折子照亮的不是整个世界,是脚下的三步路,三步路的可见就是夜路的全部安全感。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 威压诀的全机制就一句:把气提到刀上,脚下荡开一圈威压场——圈里的怪刀软一半、出手慢半拍,你的刀对它加五成;怪不…
【游戏功能】 vd = hot and base 2 or base ——一行两倍的乘法,藏在焚祭全部的痛感里:刀翻倍的代价…
【游戏功能】 大怪蓄力蓄到发亮的那一发重击,凭什么有信心接下来?多数玩家的答案是"闪",可闪有冷却、有前摇、有失误——舍身盾…
【游戏功能】 战斗组翻到一笔没人认领的异常:玩家的血条在没有挨打记录的情况下稳定下滑,一秒四点,战斗日志里攻击来源是空的。排…
【游戏功能】 数值组翻过一笔扯皮的账:同一只头目,A 队三分钟放倒,B 队磨了十一分钟还灭了——装备差不到一成,输出差了一倍…
【游戏功能】 借刀符的全机制就一句:一张符掷中谁,谁就中招六秒——六秒里它的爪听你的,转身撕咬自己人,符效一过它回过神来第一…