World Class
刚体和约束所活动的动态世界
构造器
World
-
[options]
参数:
-
[options]Object 可选-
[solver]Solver 可选默认为 GSSolver.
-
[gravity]Array 可选默认为 y=-9.78.
-
[broadphase]Broadphase 可选默认为 SAPBroadphase
-
[islandSplit=true]Boolean 可选
-
Example:
var world = new World({
gravity: [0, -10],
broadphase: new SAPBroadphase()
});
world.addBody(new Body());
项目索引
方法
属性
- applyDamping
- applyGravity
- applySpringForces
- bodies
- bodiesToBeRemoved
- BODY_SLEEPING static
- broadphase
- constraints
- contactMaterials
- defaultContactMaterial
- defaultMaterial
- disabledBodyCollisionPairs
- emitImpactEvent
- frictionGravity
- gravity
- ISLAND_SLEEPING static
- islandManager
- islandSplit
- lastTimeStep
- narrowphase
- NO_SLEEPING static
- overlapKeeper
- sleepMode
- solveConstraints
- solver
- springs
- stepping
- time
- useFrictionGravityOnZeroGravity
- useWorldGravityAsFrictionGravity
Methods
addBody
-
body
将一个刚体添加到模拟中
参数:
-
bodyBody
Example:
var world = new World(),
body = new Body();
world.addBody(body);
addConstraint
-
constraint
将一个约束添加到模拟中
参数:
-
constraintConstraint
Example:
var constraint = new LockConstraint(bodyA, bodyB);
world.addConstraint(constraint);
clear
()
重启世界,移除所有刚体、约束和弹簧
getContactMaterial
-
materialA -
materialB
返回两个材质的碰撞材质
Returns:
匹配的碰撞材质,如果失败返回false
has
-
type -
listener
检查这一事件监听器是否添加
参数:
-
typeString -
listenerFunction
Returns:
hitTest
-
worldPoint -
bodies -
precision
检测是否该点与刚体重合
参数:
-
worldPointArray用于检测重合的点
-
bodiesArray用于检测重合的刚体列表
-
precisionNumber用于匹配粒子和线,添加一些边距在这些无穷小的物体上
Returns:
与该点碰撞的所有刚体
internalStep
-
dt
Make a fixed step.
参数:
-
dtNumber
off
-
type -
listener
移除这一事件监听器
参数:
-
typeString -
listenerFunction
Returns:
自身,用于链式调用
on
-
type -
listener
添加一个事件监听器
参数:
-
typeString -
listenerFunction
Returns:
自身,用于链式调用
raycast
-
result -
ray
物理世界中被射线投射到的所有刚体
参数:
-
resultRaycastResult -
rayRay
Returns:
如果刚体被击中则为true
Example:
var ray = new Ray({
mode: Ray.CLOSEST, // or ANY
from: [0, 0],
to: [10, 0],
});
var result = new RaycastResult();
world.raycast(result, ray);
// Get the hit point
var hitPoint = vec2.create();
result.getHitPoint(hitPoint, ray);
console.log('Hit point: ', hitPoint[0], hitPoint[1], ' at distance ' + result.getHitDistance(ray));
var ray = new Ray({
mode: Ray.ALL,
from: [0, 0],
to: [10, 0],
callback: function(result){
// Print some info about the hit
console.log('Hit body and shape: ', result.body, result.shape);
// Get the hit point
var hitPoint = vec2.create();
result.getHitPoint(hitPoint, ray);
console.log('Hit point: ', hitPoint[0], hitPoint[1], ' at distance ' + result.getHitDistance(ray));
// If you are happy with the hits you got this far, you can stop the traversal here:
result.stop();
}
});
var result = new RaycastResult();
world.raycast(result, ray);
runNarrowphase
-
np -
bi -
si -
xi -
ai -
bj -
sj -
xj -
aj -
mu
为形状i 和 j执行细测.
参数:
-
npNarrowphase -
biBody -
siShape -
xiArray -
aiNumber -
bjBody -
sjShape -
xjArray -
ajNumber -
muNumber
setGlobalRelaxation
-
relaxation
为所有方程和碰撞材质设置弛豫度
参数:
-
relaxationNumber
setGlobalStiffness
-
stiffness
为所有方程和碰撞材质设置刚度
参数:
-
stiffnessNumber
step
-
dt -
[timeSinceLastCalled=0] -
[maxSubSteps=10]
沿着时间推进世界
有两种模式,简单的模式是不插值的固定步进,在这种情况下你只使用第一个参数。第二种情况用了插值,在这种情况下,你可以提供从上次调用函数到现在所花的时间,也可以提供最大步进数
参数:
-
dtNumber使用的固定步进
-
[timeSinceLastCalled=0]Number 可选上次调用函数以来所经过的时间
-
[maxSubSteps=10]Number 可选每个函数调用占用的最大固定步长
Example:
// Simple fixed timestepping without interpolation
var fixedTimeStep = 1 / 60;
var world = new World();
var body = new Body({ mass: 1 });
world.addBody(body);
function animate(){
requestAnimationFrame(animate);
world.step(fixedTimeStep);
renderBody(body.position, body.angle);
}
// Start animation loop
requestAnimationFrame(animate);
// Fixed timestepping with interpolation
var maxSubSteps = 10;
var lastTimeSeconds;
function animate(t){
requestAnimationFrame(animate);
timeSeconds = t / 1000;
lastTimeSeconds = lastTimeSeconds || timeSeconds;
deltaTime = timeSeconds - lastTimeSeconds;
world.step(fixedTimeStep, deltaTime, maxSubSteps);
renderBody(body.interpolatedPosition, body.interpolatedAngle);
}
// Start animation loop
requestAnimationFrame(animate);
Properties
applyDamping
Boolean
启用自动在每一步进中应用刚体的阻尼
Default: true
applyGravity
Boolean
启用自动在每一步进中应用刚体的重力
Default: true
applySpringForces
Boolean
启用自动在每一步进中应用刚体的弹力
Default: true
bodiesToBeRemoved
Array
private
预设要在在每一步进末尾被移除的刚体
BODY_SLEEPING
Number
static
使单独的刚体在睡眠状态下失活
constraints
Array
用户自定义添加的约束
contactMaterials
Array
添加到物理世界的碰撞材质
disabledBodyCollisionPairs
Array
private
禁用刚体碰撞对,参考{{#crossLink "World/disableBodyCollision:method"}}.
emitImpactEvent
Boolean
如果你想物理世界impact事件时设置为true,将其关闭可以提高性能
Default: true
frictionGravity
Number
用于估算摩擦最大力时使用的重力(mumassgravity).
gravity
Array
物理世界的重力,将在每一次step() 开始应用在所有刚体上
lastTimeStep
Number
用于追踪上一步中使用的时间消耗
NO_SLEEPING
Number
static
永不让刚体失活
sleepMode
Number
在模拟中使刚体失活的模式,可选模式有World.NO_SLEEPING, World.BODY_SLEEPING 和 World.ISLAND_SLEEPING. 如果启用了睡眠,你可能在刚体不应睡眠时睡眠时需要 唤醒刚体,如果在物理时间中启用了睡眠,但希望为特定的刚体禁用它,参见Body.allowSleep.
Default: World.NO_SLEEPING
solveConstraints
Boolean
启用或禁用每一步进中的约束求解
Default: true
stepping
Boolean
是否处在step()中
time
Number
世界时间
useFrictionGravityOnZeroGravity
Boolean
如果 .gravity 为0, 同时 .useWorldGravityAsFrictionGravity=true, 那么切换为使用 .frictionGravity用于摩擦,这个回退对于零重力游戏来说很有用
Default: true
useWorldGravityAsFrictionGravity
Boolean
如果你希望.frictionGravity自动设置为 .gravity的长度,设置为true
Default: true
Events
postBroadphase
在粗测阶段收集了世界中的碰撞对后触发。 在这个事件处理器中,你可以根据你的喜好修改碰撞对数组,用于避免你不希望碰撞的两个物体发生碰撞
Event Payload:
-
pairsArray碰撞对数组,如果这个数组是[body1,body2,body3,body4], 则刚体对1,2 和 3,4 将继续进入到精测阶段
