目录
FP _invDt0; //时间步倍率,所有的冲量都会乘以该倍率。该数值为时间间隔的倒数
bool _stepComplete; //时间步完成
bool HasNewContacts; //存在新接触点
IDestructionListener DestructionListener;//析构监听器
IDrawer Drawer; //调试绘制
bool ContinuousPhysics; //是否启用连续碰撞
FVector2 Gravity; //重力常数
bool IsAutoClearForces //清除受力
bool IsLocked; //是否锁定世界
bool AllowSleep; //世界是否允许休眠
bool SubStepping; //子步进,调试物理系统时可以开启,物理系统会按每帧执行
bool WarmStarting; //热启动,启动以减少约束求解的迭代次数
ContactManager ContactManager; //接触点管理器
LinkedList<Body> BodyList; //物体链表
LinkedList<Joint> JointList; //关节链表
public void Step(FP timeStep, int velocityIterations, int positionIterations)
//以下为伪代码
world oldWorld;
world newWorld;
//此时oldWorld中有一个Body的Object UserData存储的是游戏中一个物体的RigidBody,该RigidBody也存储了对于该世界中改Body的引用指针
oldWolrd.body.userData = RigidBody;
//RigidBody结构
public class RigidBody
{
public Body bd;
bd = setBody();//此时bd = oldWolrd.body
}
//那么进行备份时需要
newWorld.body.userData = oldWolrd.body.userData;
//进行回滚时需要
if(newWorld.body.userData.getType() == new RigidBody.getType())
{
var dt = newWorld.userData as RigidBody;
dt.bd = newWorld.body;
}