Body Class
刚体,具有质量、位置、速度以及一些用于碰撞的形状的物理对象
构造器
Body
-
[options]
参数:
-
[options]Object 可选-
[force]Array 可选 -
[position]Array 可选 -
[velocity]Array 可选 -
[allowSleep]Boolean 可选 -
[collisionResponse]Boolean 可选 -
[angle=0]Number 可选 -
[angularForce=0]Number 可选 -
[angularVelocity=0]Number 可选 -
[ccdIterations=10]Number 可选 -
[ccdSpeedThreshold=-1]Number 可选 -
[fixedRotation=false]Number 可选 -
[gravityScale]Number 可选 -
[id]Number 可选 -
[mass=0]Number 可选一个大于等于 0 的数字,如果为0, 则type 将被设为Body.STATIC
-
[sleepSpeedLimit]Number 可选 -
[sleepTimeLimit]Number 可选
-
Example:
// Create a typical dynamic body
var body = new Body({
mass: 1,
position: [0, 0],
angle: 0,
velocity: [0, 0],
angularVelocity: 0
});
// Add a circular shape to the body
body.addShape(new Circle({ radius: 1 }));
// Add the body to the world
world.addBody(body);
项目索引
方法
- addShape
- adjustCenterOfMass
- applyDamping
- applyForce
- applyForceLocal
- applyImpulse
- applyImpulseLocal
- emit
- fromPolygon
- getAABB
- getArea
- getVelocityAtPoint
- has
- integrate
- off
- on
- overlaps
- removeShape
- setDensity
- setZeroForce
- sleep
- sleepTick
- toLocalFrame
- toWorldFrame
- updateAABB
- updateBoundingRadius
- updateMassProperties
- updateSolveMassProperties
- vectorToLocalFrame
- vectorToWorldFrame
- wakeUp
属性
- aabb
- aabbNeedsUpdate
- allowSleep
- angle
- angularDamping
- angularForce
- angularVelocity
- AWAKE static
- boundingRadius
- ccdIterations
- ccdSpeedThreshold
- collisionResponse
- damping
- DYNAMIC static
- fixedRotation
- fixedX
- fixedY
- force
- gravityScale
- id
- idleTime
- inertia
- interpolatedAngle
- interpolatedPosition
- invInertia
- invMass
- KINEMATIC static
- mass
- massMultiplier
- position
- previousAngle
- previousPosition
- shapes
- SLEEPING static
- sleepSpeedLimit
- sleepState
- sleepTimeLimit
- SLEEPY static
- STATIC static
- timeLastSleepy
- type
- velocity
- vlambda
- wlambda
- world
Methods
addShape
-
shape -
[offset] -
[angle]
将一个形状依附到这个刚体上,可以在添加形状时传入一个局部变换值,使得形状拥有相对刚体重心的位置和角度。这将自动更新刚体的属性和包围半径
参数:
-
shapeShape将依附到刚体上的形状 -
[offset]Array 可选形状的局部偏移
-
[angle]Number 可选形状的局部角度
Example:
var body = new Body(),
shape = new Circle({ radius: 1 });
// 将形状置于刚体中间
body.addShape(shape);
// 添加另一个形状, 将其放置于距离刚体重心X轴方向1单位的位置
body.addShape(shape,[1,0]);
// 添加另一个形状, 将其放置于距离刚体重心Y轴方向1单位的位置,同时将其旋转90度(逆时针方向)
body.addShape(shape,[0,1],Math.PI/2);
adjustCenterOfMass
()
调整形状的偏移量,使得其中心变成刚体的重心。
applyForce
-
force -
[relativePoint]
在相对刚体重心的一个点施加作用力, 这个点可以是刚体表面上的任意一点, 这种情况下施加作用力将影响刚体的force 作用力和angularForce 角速度,如果这一点为0, 这一作用力将直接施加在刚体重心,产生的扭矩将为0
参数:
-
forceArray施加在刚体上的力
-
[relativePoint]Array 可选相对重心的施力点
applyForceLocal
-
localForce -
[localPoint]
对物体所在位置施加一个作用力
参数:
-
localForceArray施加在刚体所在物理空间的向量力
-
[localPoint]Array 可选刚体所在的物理世界中的一个关联点,如果不给出,它将被设置为零,所有的冲量将施加到刚体重心
applyImpulse
-
impulse -
[relativePoint]
在相对刚体的某一点上施加一个冲量(冲量是一个短时间内加到刚体上的力,冲量= 力 * 时间),这个点可以是刚体表面上的任意一点。冲量将影响刚体的velocity 速度和angularVelocity 角速度
参数:
-
impulseArray施加在刚体所在物理空间的冲量
-
[relativePoint]Array 可选刚体所在的物理世界中的一个关联点,如果不给出,它将被设置为零,所有的冲量将施加到刚体重心
applyImpulseLocal
-
impulse -
[relativePoint]
在相对刚体的某一点上施加一个冲量(冲量是一个短时间内加到刚体上的力,冲量= 力 * 时间),这个点可以是刚体表面上的任意一点。冲量将影响刚体的velocity 速度和angularVelocity 角速度
参数:
-
impulseArray施加在刚体所在物理空间的冲量
-
[relativePoint]Array 可选刚体所在的物理世界中的一个关联点,如果不给出,它将被设置为零,所有的冲量将施加到刚体重心
emit
-
event
触发一个事件,并返回自身,用于链式调用
参数:
-
eventObject-
typeString
-
Returns:
自身,用于链式调用
fromPolygon
-
path -
[options]
读取一个多边形路路径,转化为凸型并将其放置在适当的偏移点上。
参数:
-
pathArray包含多个2D向量的数组的凹或凸多边形,这个形状必须是普通的且不包含留空(内部)的
-
[options]Object 可选-
[optimalDecomp=false]Boolean 可选是否开启最优分解,当顶点大于10个时性能将下降
-
[skipSimpleCheck=false]Boolean 可选如果你已经知道路径不会与自身相交,将其设置为true则跳过检查
-
[removeCollinearPoints=false]Boolean | Number 可选设置为一个数字(角度阈值)去除共线点,或false保持所有点
-
Returns:
如果成功则返回true,否则为false
getArea
()
Number
返回刚体所包含的形状总面积
Returns:
getVelocityAtPoint
-
result -
relativePoint
返回刚体上一个点的速度
参数:
-
resultArray放置结果的向量数组
-
relativePointArray面向世界的向量,需要得到速度信息的点的位置
Returns:
刚体上一个点的速度
has
-
type -
listener
检查是否添加了该事件监听器
参数:
-
typeString -
listenerFunction
Returns:
integrate
-
dt
根据时间以及当前的速度移动刚体。
参数:
-
dtNumber时间增量
off
-
type -
listener
移除指定的事件监听
参数:
-
typeString -
listenerFunction
Returns:
自身,用于链式调用
on
-
type -
listener
添加一个事件监听
参数:
-
typeString -
listenerFunction
Returns:
自身,用于链式调用
overlaps
-
body
检查该刚体是否覆盖于其他刚体,需要注意的是,这个方法仅在刚体已添加到物理世界中且至少已经有一次步进的情况下可用
参数:
-
bodyBody
Returns:
removeShape
-
shape
删除指定的形状
参数:
-
shapeShape
Returns:
如果找到并移除了指定的形状则返回True, 否则为false
setDensity
-
density
设定刚体的总密度
参数:
-
densityNumber
setZeroForce
()
将刚体的作用力归零
sleep
()
强制让刚体睡眠
sleepTick
-
time -
dontSleep -
dt
在每次时间步进时调用,更新内部睡眠定时器并在必要时更改睡眠状态
参数:
-
timeNumber以秒为单位的世界时间
-
dontSleepBoolean -
dtNumber
toLocalFrame
-
out -
worldPoint
将世界中的一个点移动到刚体的范围中。(Transform a world point to local body frame.)
参数:
-
outArray存放结果的向量数组
-
worldPointArray世界中的一个点(The input world point)
toWorldFrame
-
out -
localPoint
将一个本地的点移动到世界范围内(Transform a local point to world frame.)
参数:
-
outArray存放结果的向量数组
-
localPointArray范围中的一个点(The input local point)
updateAABB
()
更新刚体的包围盒模型, 并且设置 .aabbNeedsUpdate = false.
updateBoundingRadius
()
更新刚体的边缘半径(this.boundingRadius). 如果形状尺寸或位置改变了就完成了
updateMassProperties
()
更新这个刚体的 .inertia, .invMass, .invInertia 属性, 当改变刚体的结构或质量时需要调用这个方法
Example:
body.mass += 1;
body.updateMassProperties();
updateSolveMassProperties
()
private
vectorToLocalFrame
-
out -
worldVector
将世界中的一个点移动到刚体的范围中。(Transform a world point to local body frame.)
参数:
-
outArray存放结果的向量数组
-
worldVectorArray世界中的一个向量(The input local point)
vectorToWorldFrame
-
out -
localVector
将一个本地的点移动到世界范围内(Transform a local point to world frame.)
参数:
-
outArray存放结果的向量数组
-
localVectorArray范围中的一个向量(The input local point)
wakeUp
()
唤醒当前刚体. 正常情况下你不需要用到它,因为当刚体触发类似于碰撞等的事件时会自动苏醒。 这一方法将设置睡眠状态为Body.AWAKE 同时触发wakeUp 事件,即使刚体在此之前没有苏醒
Properties
aabbNeedsUpdate
Boolean
标志包围盒是否需要更新,使用.updateAABB()进行更新
Example:
// 强制更新包围盒
body.aabbNeedsUpdate = true;
body.updateAABB();
console.log(body.aabbNeedsUpdate); // false
angle
Number
角度
Example:
// 这一属性没有限定在标准的0 - 2π 之间,可以设置为任意数字,如果你需要设置它为这一区间的数字,可以用下列函数进行换算;
function normalizeAngle(angle){
angle = angle % (2*Math.PI);
if(angle < 0){
angle += (2*Math.PI);
}
return angle;
}
angularDamping
Number
角度阻尼,0 - 1之间的数字
Default: 0.1
angularVelocity
Number
角速度,每秒转动设定的弧度
AWAKE
Number
static
boundingRadius
Number
边界圆半径
ccdIterations
Number
在连续碰撞检测时遍历碰撞所使用的迭代次数,次数越多将使得连续碰撞检测碰撞的误差变小,但次数越少将提高性能。
Default: 10
ccdSpeedThreshold
Number
如果刚体的速度超过此阈值,连续碰撞检测将被启用。将该值设置为一个负数将完全禁用该刚体的连续碰撞检测;
Default: -1
collisionResponse
Boolean
当与其他刚体碰撞时是否产生碰撞作用力。需要注意的是,碰撞仍会产生,但会被禁用。即:该刚体会穿过其他刚体,但仍然会触发碰撞等事件。
damping
Number
在速度的方向上作用于刚体的线性阻尼,取值在0 - 1之间;
Default: 0.1
DYNAMIC
Number
static
Dynamic body.
fixedRotation
Boolean
若为真,则将固定刚体的旋转
fixedX
Boolean
若为真,则将固定刚体在X轴上的移动,此时刚体依然可以沿着Y轴上移动。
fixedY
Boolean
若为真,则将固定刚体在Y轴上的移动,此时刚体依然可以沿着X轴上移动。
force
Array
作用于刚体的外力。 因为刚体的作用力 (and 角向力) 在每一次步进后会变成0, 所以你需要在每一次步进前设置作用力
Example:
// This produces a forcefield of 1 Newton in the positive x direction.
for(var i=0; i<numSteps; i++){
body.force[0] = 1;
world.step(1/60);
}
// This will apply a rotational force on the body
for(var i=0; i<numSteps; i++){
body.angularForce = -3;
world.step(1/60);
}
gravityScale
Number
重力比例因子,如果希望刚体忽略重力影响,将其设置为0即可,如果希望刚体反重力,将其设置为-1;
Default: 1
id
Number
刚体的唯一标志
idleTime
Number
刚体持续睡眠的时间
inertia
Number
刚体围绕Z轴上的惯性
interpolatedAngle
Number
刚体的插入角度,用于渲染
interpolatedPosition
Array
刚体的插入位置,用于渲染
invInertia
Number
反向惯性
invMass
Number
反向重力
KINEMATIC
Number
static
Kinematic body.
mass
Number
刚体的质量
massMultiplier
Array
private
position
Array
刚体的位置
previousAngle
Number
刚体的前一角度
previousPosition
Array
刚体的前一位置
shapes
Array
刚体中的形状,可以多个
SLEEPING
Number
static
sleepSpeedLimit
Number
如果刚体当前的速度(数量速度speed, 非velocity矢量速度)小于这一数值,刚体将被视为需进入惺忪状态
Default: 0.2
sleepState
Number
Body.AWAKE, Body.SLEEPY 和 Body.SLEEPING之一
刚体初始的睡眠状态为 Body.AWAKE. 如果其当前速度低于 .sleepSpeedLimit, 刚体的睡眠状态将变为 Body.SLEEPY. 如果刚体保持 Body.SLEEPY .sleepTimeLimit 秒将进入休眠模式 (Body.SLEEPY)
Default: Body.AWAKE
sleepTimeLimit
Number
如果刚体保持Body.SLEEPY(惺忪状态)超出这一限制时间将进入休眠。
Default: 1
SLEEPY
Number
static
STATIC
Number
static
Static body.
timeLastSleepy
Number
private
The last time when the body went to SLEEPY state.
type
Number
刚体的运动类型, Body.STATIC, Body.DYNAMIC 和 Body.KINEMATIC之一
- STATIC 刚体不可移动,也不受作用力和碰撞影响
- DYNAMIC 刚体将根据碰撞和作用力运动
- KINEMATIC 刚体根据其velocity 属性移动,也不受作用力和碰撞影响。
Example:
// B刚体默认为静力学模型,静力学模型刚体永远不移动
var body = new Body();
console.log(body.type == Body.STATIC); // true
// 将刚体的质量设置为非零数值时,它将变成能够运动及与其他刚体进行交互的动力学模型
var dynamicBody = new Body({
mass : 1
});
console.log(dynamicBody.type == Body.DYNAMIC); // true
// 运动学模型刚体仅在改变其矢量速度时发生移动
var kinematicBody = new Body({
type: Body.KINEMATIC // Type can be set via the options object.
});
velocity
Array
刚体的当前速度
vlambda
Array
在世界最后一次步进(step)中添加到刚体的约束速度。
wlambda
Array
在世界最后一次步进(step)中添加到刚体的角约束速度。
