砸金蛋、翻牌消除、捕鱼类碰撞判定、可爱风重力小游戏——这类玩法用脚本逐个算碰撞既慢又难调。接入 Box2D 物理引擎后,碰撞检测、重力、反弹全部由引擎完成,Lua 侧只定义物体与规则。Cocos2d-x 自带 physics 分支,996 客户端的 GUI 节点可直接绑定物理体。
第一步,创建物理世界并设重力;第二步,界面节点绑定物理体(圆形或矩形);第三步,注册碰撞回调分发到 Lua;第四步,每帧让世界步进:
local world = cc.ExPhysicsWorld:createWithGravity(cc.p(0, -980))
world:setContactListener(function(eventA, eventB)
if eventA.group == "coin" and eventB.group == "paddle" then
collectCoin(eventA.node)
end
end)
碰撞回调里只做标记与计分,不直接创建销毁节点(物理步进中改节点树会崩溃),收集动作延迟一帧执行。
restitution(弹性) 决定反弹力度,砸金蛋类 0.3~0.5 手感自然,超过 0.8 会弹跳不止;friction(摩擦) 控制滑动停止速度,转盘类玩法 0.4 起调;linearDamping(线性阻尼) 让物体自然减速,抛掷类玩法 0.1~0.3。调参顺序:先定重力与阻尼让运动"看起来对",再调弹性与碰撞分组,每次只改一个参数并录像对比。
物理世界的刚体数量控制在 60 个以内,超出时把静态装饰物改为纯视觉节点(不绑物理体);碰撞回调不做耗时操作,结算逻辑延迟处理。禁用场景:战斗技能判定不要用物理引擎(数值策划需要的是公式可控,不是物理拟真)。物理引擎的价值在"规则明确的休闲玩法",接入一个玩法验证一个,不追求全项目物理化。
物理玩法的调试依赖可视化:开启引擎的物理体绘制开关,刚体轮廓、接触点直接叠加在画面上,穿透与抖动当场可见。数值验证用固定初速度的标准化抛掷,记录落点与反弹次数,参数调整前后各录一组数据对照。上线前还要做一次压力测试:同屏刚体拉到上限数量,观察帧率与内存曲线,确认性能预算没有被突破。物理玩法调参周期通常两到三天,比纯脚本玩法长,排期时要预留。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 战士的烈火剑法一击熄火后要等八秒冷却,连招断档感强烈。疾风烈火斩在烈火剑法命中后给一次连击窗口:三秒内再…
实战应用:用在哪里 阵营对抗打到中期容易疲软:打赢没有额外好处,输掉也没有代价。阵营声望体系给阵营战装上荣誉刻度:个人与阵营…
实战应用:用在哪里 拿下沙巴克之后呢?城主除了名字挂在城墙上,对城市毫无影响。城主施政玩法让占领变成治理:城主每周获得市政令…
实战应用:用在哪里 主线路光缆被挖断的深夜,全服掉线 20 分钟,玩家以为游戏倒闭。备用线路方案给接入层配第二条出口:主线路…
实战应用:用在哪里 行会官员由帮主任命的老模式弊端明显:任人唯亲、能上不能下。行会选举接口把官员换届做成投票制:每两个月一次…
实战应用:用在哪里 烈火剑法的伤害加成、冷却时间、下一级提升,全靠玩家记忆或去官网查。技能说明悬浮卡片在鼠标悬停技能图标零点…