【游戏功能】
皮影戏的一台戏只有一个人:两只手五根竹竿,幕布上演出千军万马。今天拆皮影戏的表现,看"剪影"这个最极致的简化怎么做出生动的演出。
一、亮幕、操偶、换幕三段演出
皮影戏的演出三段。亮幕段:灯亮,白幕透出暖光,幕后的影人从暗处浮现——影人是剪影,没有五官没有衣纹,全靠轮廓告诉观众"这是将军还是仙女"。操偶段:两根竹竿撑着影人的双臂,影人随竹竿摆动做同角度的姿势——将军按刀、仙女甩袖,姿势的切换靠竹竿角度的变化,竹竿一转影人就"活"了。换幕段:一幕演完灯暗半秒再亮,两个影人换姿势重新登场——换幕是皮影戏的分镜,每一幕一个定格姿势,连起来就是一出戏。三段的要点:剪影的生动不在细节在动态——轮廓动起来,剪影就活了。
完整演示在这,点换一幕:
fx-shadowplay
二、幂尔框架实现:姿势切换与竹竿联动
影人的四肢角度按幕切换,竹竿随臂转动:
local ShadowPlay = {}
local POSES = { "将军巡营", "仙女散花", "武生亮掌", "老生捋须" }
local ARM_A = { 0.9, 2.6, 0.4, 1.6 }
local act = 1
function SP.NextAct()
act = act % #POSES + 1
SL:SetValue("act", act)
SL:PlaySfx("scene_change")
-- 幕布暗亮切换: 换幕的翻页感
SL:FlashScreen("#000000", 0.4)
SL:ScheduleOnce(function()
SL:ShowSystemTips("第 " .. act .. " 幕 · " .. POSES[act])
end, 0.4)
end
function SP.Render(dt)
local sway = math.sin(SL:GetValue("engineTime") * 2) * 0.04
SL:SetActorRotate("puppet_a", sway)
SL:SetActorRotate("puppet_b", -sway)
-- 双臂角度按当前幕切换
local a = ARM_A[act]
SL:SetActorArm("puppet_a", "left", -math.cos(a) * 26, math.sin(a) * 26)
SL:SetActorArm("puppet_a", "right", math.cos(a + 0.8) * 26, math.sin(a + 0.8) * 26)
-- 影人的须发道具按角色换装
if act == 1 then SL:ShowFx("general_hat")
elseif act == 2 then SL:ShowFx("fairy_ribbon") end
end
return SP
双影人对演是皮影戏的经典构图:一将一帅隔幕对峙,两个剪影的姿势对话就是全部剧情。
三、剪影的光与道具的减法
剪影的光从幕后来:灯在幕布正后方,影人是纯黑剪影,幕布透出暖黄的底光——光晕的中心亮四周暗,影人站在光晕里最醒目。影人的细节做减法:头部圆、躯干五边、四肢五段竹竿——细节多一分剪影就糊一分,皮影艺人的行话是"影人要看透"。道具按角色做加法:将军的帽、仙女的飘带、武生的头冠,头上多的一笔就是角色的全部身份。双竹竿的露出是皮影戏的诚实:竿子就是要在幕布上露出来的,藏起来反而假——观众看皮影戏看的就是"人怎么操纵影子",竿子是戏的一部分。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 围住一只怪的贪心人人都有:三面堵死一只不漏——可围三阙一的规矩偏偏唱反调:围三面留一口,怪只会往那口里钻——口…
【游戏功能】 元素搭配的老话是水火不容,可战场上的说法得倒过来念:水是雷的引信。引水的机制是一场两步的合谋:先泼一瓢水把地泼…
【游戏功能】 低血大怪的回血机制人人见过,可血珠的回血藏着一手"要你去抢"的心机:它每掉两成血就吐一颗血珠在地上,两秒内不踩…
【游戏功能】 隐形怪人人都遇到过,可现身的机制比隐形狠:它钻进影子里消失,一秒后从你脚下画的影圈里钻出来,背刺三十四点——影…
【游戏功能】 有人纳闷:大怪危机预警里最气人的一档是什么?不是它放大招,是它开阵——法阵一转,转满三秒蹦出两只小狼,好好的单…
【游戏功能】 if chg <= 0.8 then lock = true ——一行把"锁定"写进蓄力里的判定,道破了蓄力炮…