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

铜钱镖:借墙弹你没商量

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

【游戏功能】

铜钱镖是暗器里的数学家:直飞不中就借墙反弹,折线的最后一跳才是杀招。今天拆铜钱镖的表现,看"反弹次数"这个计数器怎么把一块铜板变成追踪弹。

一、掷出、折线、命中三段弹道

铜钱镖的弹道三段。掷出段:铜钱从指间旋着飞出,旋转的铜板在空中闪出断续的金光——旋转是铜钱的身份标识:不转的铜钱像石头,转起来的才像暗器。折线段:铜钱撞墙反弹变向,每弹一次方向改变一次——反弹的次数就是设计的难度旋钮:弹一次是直线延伸,弹四次是封锁走位的折线网。命中段:末次反弹变向直奔狼怪头胸,命中时金环炸开、大字报伤——命中的伤害随弹跳次数递增:弹得越多疼得越狠,折线的每一跳都在给铜钱蓄力。三段的账本逻辑:直飞必失手,折线才是杀招——玩家学会借墙打人的那一刻,铜钱镖才算入门。

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

demo
 fx-ricochet

二、幂尔框架实现:反弹计数与命中加成

反弹次数存进铜钱状态,伤害按弹跳数递增:

lua
local Ricochet = {}
local KEY = { GRAVITY = 190 }

local coin = nil

function RC.Throw()
    if coin then return end
    coin = {
        x = SL:GetValue("actorX") + 24,
        y = SL:GetValue("actorY") - 60,
        vx = 420, vy = -160,
        bounces = 0, maxB = SL:GetValue("maxBounce") or 2
    }
    SL:PlayActorAct("player", "attack")
    SL:PlaySfx("coin_flick")
end

function RC.Tick(dt)
    if not coin then return end
    coin.vy = coin.vy + KEY.GRAVITY * dt
    coin.x = coin.x + coin.vx * dt
    coin.y = coin.y + coin.vy * dt
    coin.rot = coin.rot + dt * 12
    -- 四壁反弹
    local bounced = false
    if coin.x < 20 then coin.x = 20; coin.vx = math.abs(coin.vx); bounced = true end
    if coin.x > SL:GetValue("width") - 20 then
        coin.x = SL:GetValue("width") - 20
        coin.vx = -math.abs(coin.vx)
        bounced = true
    end
    if coin.y < 16 then coin.y = 16; coin.vy = math.abs(coin.vy); bounced = true end
    if coin.y > SL:GetValue("groundY") - 6 then
        coin.y = SL:GetValue("groundY") - 6
        coin.vy = -math.abs(coin.vy)
        bounced = true
    end
    if bounced then
        coin.bounces = coin.bounces + 1
        SL:PlayBurst(coin.x, coin.y, "coin_spark", 4)
        SL:PlaySfx("coin_wall")
    end
    -- 命中: 伤害随弹跳数递增
    local target = SL:GetValue("curTarget")
    if math.abs(coin.x - SL:GetValue("actorX", target)) < 24
       and math.abs(coin.y - (SL:GetValue("actorY", target) - 60)) < 30 then
        SL:DeductHp(target, 14 + coin.bounces * 6)
        SL:ShowHitNum(target, 14 + coin.bounces * 6, "coin")
        SL:ScreenShake(0.2, 3)
        coin = nil
    end
end

return RC

反弹次数转伤害的公式藏在命中那行:14 + 弹跳数乘六——弹两次二十六点,弹三次三十二点,玩家数着弹跳算伤害。

三、弹跳次数与抛物线的合谋

重力让弹跳次数天然有限:铜钱带重力就会落地,落地的铜钱滑行减速——所以反弹的次数不用人为限制,重力就是裁判。弹跳的次数统计要外显:铜钱每弹一次头顶的计数跳一格——玩家看计数就知道这枚镖"值多少钱",计数的可视化让伤害的递增有据可查。最后,命中的加成文案要直白:"-32"的数字旁标注"3弹"——弹跳数就是伤害的出处,账目清晰玩家才会研究弹墙的路线,会算弹墙路线的玩家,就是这门暗器的大师。

作者履历与出处

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

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

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

LATEST ARTICLES

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

进阶实战游戏功能

围三阙一:围三面赶一口,出口就是网口

【游戏功能】 围住一只怪的贪心人人都有:三面堵死一只不漏——可围三阙一的规矩偏偏唱反调:围三面留一口,怪只会往那口里钻——口…

2026-09-30 21:31 996 技术组
进阶实战游戏功能

引水:先泼水,再借一道雷

【游戏功能】 元素搭配的老话是水火不容,可战场上的说法得倒过来念:水是雷的引信。引水的机制是一场两步的合谋:先泼一瓢水把地泼…

2026-09-30 21:31 996 技术组
进阶实战游戏功能

血珠:踩碎血珠,断它口粮

【游戏功能】 低血大怪的回血机制人人见过,可血珠的回血藏着一手"要你去抢"的心机:它每掉两成血就吐一颗血珠在地上,两秒内不踩…

2026-09-30 21:31 996 技术组
进阶实战游戏功能

现身:它钻进影子,从你背后出来

【游戏功能】 隐形怪人人都遇到过,可现身的机制比隐形狠:它钻进影子里消失,一秒后从你脚下画的影圈里钻出来,背刺三十四点——影…

2026-09-30 21:31 996 技术组
进阶实战游戏功能

召唤阵:踩阵搅了它的援兵

【游戏功能】 有人纳闷:大怪危机预警里最气人的一档是什么?不是它放大招,是它开阵——法阵一转,转满三秒蹦出两只小狼,好好的单…

2026-09-30 21:31 996 技术组
进阶实战游戏功能

蓄力炮:红线锁死就横挪

【游戏功能】 if chg <= 0.8 then lock = true ——一行把"锁定"写进蓄力里的判定,道破了蓄力炮…

2026-09-30 21:31 996 技术组