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

圆周环绕:切向加向心的力学舞

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

【游戏功能】
一、一行代码拆解

SL:SetActorVelocity(id, vx + tangent, vy + centripetal)——圆周运动的核心就是给目标同时施加切向速度和向心速度。切向让它转圈,向心让它不飞出去,两个力的合力让目标沿圆周匀速运动。环绕特效、旋风斩、群体拉扯,全部建立在这个双分量的力学模型上。

二、底层原理

圆周运动的力学拆解:切向速度让目标沿圆的切线方向移动,向心速度让目标朝圆心偏转。两个速度正交合成后的结果就是圆周运动。每帧更新时向心力指向圆心、大小恒定,切向速度保持不变。如果切向速度递增,目标就会沿螺旋线向外飞——旋风斩的击退效果就是靠递增切向速度实现的。

demo
fx-hplink

三、正确写法

lua
local OrbitMotion = {}
local CONST = { KEY = "OrbitMotion", TANGENT = 120, CENTRIPETAL = 200 }

function OrbitMotion.Cast(myID, targetID)
    OrbitMotion._sched = SL:Schedule(function(dt)
        OrbitMotion:Update(dt, targetID)
    end, 0.02)
end

function OrbitMotion:Update(dt, targetID)
    local mx = SL:GetValue("ACTOR_POSITION_X", targetID)
    local my = SL:GetValue("ACTOR_POSITION_Y", targetID)
    local ox = SL:GetValue("ACTOR_POSITION_X", self._myID)
    local oy = SL:GetValue("ACTOR_POSITION_Y", self._myID)
    local dx, dy = mx - ox, my - oy
    local d = math.sqrt(dx * dx + dy * dy)
    if d < 1 then return end
    local tangentX = -dy / d * CONST.TANGENT
    local tangentY = dx / d * CONST.TANGENT
    local centripetalX = -dx / d * CONST.CENTRIPETAL
    local centripetalY = -dy / d * CONST.CENTRIPETAL
    SL:SetActorVelocity(targetID, tangentX + centripetalX, tangentY + centripetalY)
end

return OrbitMotion

四、四个必须钉死的细节

  1. 切向和向心必须正交,不正交的合成会变成椭圆轨道。2. 向心力大小恒定,切向速度决定角速度——切向越大转越快。3. 每帧重新计算方向向量,不能用上帧的方向缓存,目标移动会导致方向偏差。4. 环绕半径通过调向心力和切向力的比值控制,比值恒定则半径恒定。

五、心法

圆周运动的力学模型给了表现系统一个万能工具:任何需要"绕着转"的表现——环绕飞刃、旋风斩、星轨运转、卫星环绕——都是同一套切向加向心的组合。参数不同、轨迹不同,但力学内核完全一样。

作者履历与出处

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

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

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

LATEST ARTICLES

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

进阶实战游戏功能

撞钟:一记钟响,全场的刀顿半拍

【游戏功能】 巡查日志里有个离谱的现场:狼怪的刀抡到一半,忽然僵在半空,头顶跳出一行"前摇断"——绕了半天找不到谁动的手,最…

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

滚木:一根木头滚过去,撞它个跟头

【游戏功能】 一根木头顺着坡滚下来,凭什么比一记刀更有威慑力?滚木的答案在路上:它不长眼、不停脚、不认人,从画面这头滚到那头…

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

赶尸:一声哨响,倒下的狼替我打

【游戏功能】 有玩家举报队友"操控怪物"——录像里一头狼怪明明倒地了,几秒后又爬起来,绕开所有人径直去咬另一头狼。查了半天才…

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

背水一战:血见了底,刀反而疯了

【游戏功能】 if hp < 30 then dmg = dmg 1.6 ——一行拿命换刀的判定,撑起了背水一战全部的疯:气…

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

水漫金山:大水漫过来,它站不稳也追不上

【游戏功能】 巡查群的凌晨有条没人认领的报障:练级点的狼怪集体"变慢"了,走两步卡一步,像在水里蹚——读条记录翻到最后才发现…

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

破釜沉舟:烧了行囊,刀没了退路

【游戏功能】 行囊里明明还有三张符、两瓶药,为什么一把火烧了反而更强?破釜沉舟的账本就是这么反着记的:退路烧掉的那一刻,刀上…

2026-09-30 16:14 996 技术组