【游戏功能】
投壶是文人宴席上的射击:一支箭抛物线飞出,箭尾插进壶口才算中——中壶的箭尾朝上立在壶里,落地的箭散在壶边。今天拆投壶的表现,看"壶口会动"这个变数怎么把抛物线玩法做出紧张感。
一、调力、抛掷、中壶三段判定
投壶的判定三段。调力段:力道滑块决定箭的初速——力道小了箭半路坠地,力道大了箭飞过壶顶。抛掷段:箭沿抛物线飞向壶口,箭身的旋转随飞行加速——箭的旋转是姿态感:箭尾朝后、箭尖朝前地飞,落的时候箭尖先入壶。中壶段:箭尾插进壶口、箭杆晃两晃立稳——中的判定不是"碰到壶"而是"插进壶口",插稳的箭还要在壶里立半秒才定格。三段的判定精度层层收紧:碰到壶不算、蹭到壶沿不算、箭尾入壶口才算——投壶的"中"是所有投掷玩法里最严的,也是最有荣誉感的。
完整演示在这,调力道投一矢:
fx-toup
二、幂尔框架实现:穿越平面判定与插尾定格
入壶用"下行穿越壶口平面加横向在口内"的双重判定:
local TouHu = {}
local KEY = { POT_HALF = 24, GRAVITY = 380 }
local arrows = {}
function TH.Throw(power)
arrows[#arrows + 1] = {
x = 100, y = SL:GetValue("height") - 70,
vx = power, vy = -300,
scored = false, stuck = false
}
SL:PlayActorAct("player", "throw")
end
function TH.Tick(dt)
local potX = SL:GetValue("potX")
local rimY = SL:GetValue("potY") + 10
for i = #arrows, 1, -1 do
local a = arrows[i]
if a.stuck then
-- 插稳的箭: 尾巴颤两下定格
a.wob = math.max(0, (a.wob or 0.3) - dt)
SL:SetActorRotate("arrow" .. i, math.sin(a.wob * 40) * 0.06 * a.wob * 3)
else
a.vy = a.vy + KEY.GRAVITY * dt
local prevY = a.y
a.x = a.x + a.vx * dt
a.y = a.y + a.vy * dt
a.rot = math.atan2(a.vy, a.vx)
-- 下行穿越壶口平面 + 横向在口内
if a.vy > 0 and prevY <= rimY and a.y > rimY
and math.abs(a.x - potX) < KEY.POT_HALF - 4 then
a.scored = true
a.stuck = true
a.stickX = a.x
a.vy = 0
SL:PlaySfx("pot_in")
SL:PlayBurst(potX, rimY, "gold", 8)
SL:SetValue("hits", SL:GetValue("hits") + 1)
SL:ShowTipAbove(potX, rimY - 30, "中壶!")
end
end
end
end
return TH
穿越平面的判定比距离判定准:箭从上往下穿过壶口平面且横向在口内,才是物理意义上的"进壶"。
三、壶口游走与插尾的定格
壶口的左右游走是投壶的变数核心:游走周期取三秒一个来回,出手要预判壶口零点五秒后的位置——预判量比直接瞄准难一档,但玩家学会预判的成就感也大一档。插尾的定格动画两拍:箭杆晃两下(正弦衰减)、然后定格成箭尾朝上——晃是入壶的缓冲,定是中的的确认,两拍缺一不可。中壶的音效用"笃"的一声闷响——箭插进壶里的声音是闷的,清脆的是落地。最后,落地的箭别消失:散在壶边的落地箭留到本轮结束——散落的箭是失败的成绩单,也是下一轮的参照物:看着上轮的落点调这一轮的力道,这才是投壶的手感积累。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 围住一只怪的贪心人人都有:三面堵死一只不漏——可围三阙一的规矩偏偏唱反调:围三面留一口,怪只会往那口里钻——口…
【游戏功能】 元素搭配的老话是水火不容,可战场上的说法得倒过来念:水是雷的引信。引水的机制是一场两步的合谋:先泼一瓢水把地泼…
【游戏功能】 低血大怪的回血机制人人见过,可血珠的回血藏着一手"要你去抢"的心机:它每掉两成血就吐一颗血珠在地上,两秒内不踩…
【游戏功能】 隐形怪人人都遇到过,可现身的机制比隐形狠:它钻进影子里消失,一秒后从你脚下画的影圈里钻出来,背刺三十四点——影…
【游戏功能】 有人纳闷:大怪危机预警里最气人的一档是什么?不是它放大招,是它开阵——法阵一转,转满三秒蹦出两只小狼,好好的单…
【游戏功能】 if chg <= 0.8 then lock = true ——一行把"锁定"写进蓄力里的判定,道破了蓄力炮…