【游戏功能】
竹竿舞是节奏与勇气的双人舞:两根竹竿按节拍开合夹击,人在竿间点脚跳——竿合之前跳出是舞,竿合才跳是夹。今天拆竹竿舞的表现,看"节拍"怎么把一个跳跃动作变成节奏游戏。
一、开合、跳入、跳出三段节拍
竹竿舞的节拍三段。开合段:两根竹竿按节拍开合,开时留出跳入的缺口、合时夹击中段的脚——开合的节拍是全场的鼓点,竹竿就是鼓槌。跳入段:竹竿张开时跳入竿间——跳入的时机是节拍的前半拍,竿合之前必须跳出来。跳出段:竿合之前跳出竿间——跳出的时机是节拍的后半拍,跳出后竹竿合拢空夹一下——空夹的"啪"声就是节拍的鼓点。三段的核心是"节拍内跳":节拍是竹竿舞的灵魂,节拍感好的人跳一百下不踩竿,节拍感差的人第一下就被夹。
完整演示在这,默认自动循环:
fx-bamboo
二、幂尔框架实现:开合节拍与落地判定
竹竿按节拍开合,落地时校验是否被夹:
local Bamboo = {}
local KEY = { BEAT = 0.45 }
local beatT, open, combo, best = 0, true, 0, 0
function BM.Tick(dt)
beatT = beatT - dt
local beat = SL:GetValue("beatMs") or 450
if beatT <= 0 then
beatT = beat / 1000
open = not open
SL:PlaySfx(open and "pole_open" or "pole_close")
end
-- 跳跃物理
if not st.grounded then
st.vy = st.vy + 900 * dt
st.y = st.y + st.vy * dt
if st.y >= SL:GetValue("groundY") then
st.y = SL:GetValue("groundY")
st.grounded = true
st.vy = 0
-- 落地判定: 竿合拢时踩中
if not open and math.abs(SL:GetValue("actorX") - 330) < 40 then
st.combo = 0
SL:ShowTipAbove("player", "被夹!")
SL:PlaySfx("pinched")
else
st.combo = st.combo + 1
SL:PlaySfx("step", st.combo % 5)
end
end
end
end
function BM.Jump()
if st.grounded then
st.grounded = false
st.vy = -330
SL:PlayBurst(SL:GetValue("actorX"), SL:GetValue("groundY"), "dust", 5)
end
end
return BM
落地的判定在"竿合拢时"——竿开着落地安全、竿合着落地被夹,判定与竹竿的开合状态联动。
三、节拍速度与踩竿的宽容
节拍速度滑块是难度的总开关:慢节拍四百五十毫秒适合入门、快节拍三百毫秒逼出节奏感——节拍快了连跳的判定也收紧,好玩家追求的是快拍下的连跳纪录。踩竿的宽容要有:落地后竿合拢的判定加零点一秒的宽容帧——严格到帧的判定会把玩家逼疯,宽容帧让"差一点"变成"刚好赶上"。连跳的计数是全套玩法的分数板:连跳越高字越大,连跳清零的瞬间连击字碎裂——连跳的数字是打竹竿舞的分数板,也是尊严的刻度。最后,竹竿的配色绿色配金边——绿色的竹竿配金色的夹击闪,既像竹子又像两根金箍棒在合掌——竹竿舞的美就美在竹竿本身。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 威压诀的全机制就一句:把气提到刀上,脚下荡开一圈威压场——圈里的怪刀软一半、出手慢半拍,你的刀对它加五成;怪不…
【游戏功能】 vd = hot and base 2 or base ——一行两倍的乘法,藏在焚祭全部的痛感里:刀翻倍的代价…
【游戏功能】 大怪蓄力蓄到发亮的那一发重击,凭什么有信心接下来?多数玩家的答案是"闪",可闪有冷却、有前摇、有失误——舍身盾…
【游戏功能】 战斗组翻到一笔没人认领的异常:玩家的血条在没有挨打记录的情况下稳定下滑,一秒四点,战斗日志里攻击来源是空的。排…
【游戏功能】 数值组翻过一笔扯皮的账:同一只头目,A 队三分钟放倒,B 队磨了十一分钟还灭了——装备差不到一成,输出差了一倍…
【游戏功能】 借刀符的全机制就一句:一张符掷中谁,谁就中招六秒——六秒里它的爪听你的,转身撕咬自己人,符效一过它回过神来第一…