原文文档
一般物理模块(Box2D)都是使用 米 - 千克 - 秒(MKS) 单位制,Box2D 在这样的单位制下运算的表现是最佳的。但是我们在 2D 游戏运算中一般使用 世界坐标系中的单位(简称世界单位)来作为长度单位制,所以我们需要一个比率来进行物理单位到世界单位上的相互转换。
一般情况下我们把这个比率设置为 32,这个值可以通过 PHYSICS_2D_PTM_RATIO 获取,并且这个值是只读的。通常用户是不需要关心这个值的,物理系统内部会自动对物理单位与世界单位进行转换,用户访问和设置的都是进行 2d 游戏开发中所熟悉的世界单位。
——物理单位到世界坐标系单位的转换 | CocosCreator3.x文档
验证代码
import { _decorator, Component, Node, RigidBody2D, Vec2 } from 'cc';
const { ccclass, property, requireComponent } = _decorator;
/**
* 物理示例
*/
@ccclass('PyhsicsExample')
export class PyhsicsExample extends Component {
/** 本身节点 */
@property(Node)
selfNode: Node;
@property(RigidBody2D)
rigidBody: RigidBody2D;
start() {
// 开始时间
let startTime = new Date();
// 输出初始位置
console.log(JSON.stringify({startPosition: this.selfNode.getPosition()}));
// 间隔输出
setInterval(() => {
// 输出当前位置
console.log(JSON.stringify({duration: new Date().getTime() - startTime.getTime(), curPosition: this.selfNode.getPosition()}));
// 直接设置线性速度
this.rigidBody.linearVelocity = new Vec2(0,1);
}, 1000);
}
}
验证结果:
可以看到当刚体速度为1m/s的时候,curPosition
每秒的差值为32,也就是32px/s。结论得证。