对某个body应用反作用力:下面是对circleBody 我们在定义这个circleBody时给了其name
即: body.userData.name="circle"
假如定义的world的重力为 gravity = new b2Vec2(0,10,0);
心脏函数:
addEventListener(Event.ENTER_FRAME, Update, false,true);
则在Update函数:
public function Update(e:Event):void {
var ant_gravity :b2Vec2;//声明相反的作用力
m_world.Step(m_timeStep, m_iterations);
for (var bb:b2Body = m_world.m_bodyList; bb; bb = bb.m_next) {
//定义二倍于重力的反作用力,则其合力为一个重力大小,方向与重力方向相反,
其就是我们要想要的反作用力
if (bb.GetUserData()!=null) {
if (bb.GetUserData().name=="circle") {
//实例化两倍于gravity的反作用力
ant_gravity = new b2Vec2(0.0,-20.0*bb.GetMass());//质量*重力加速度10
bb.ApplyForce(ant_gravity,bb.GetWorldCenter());
}
}
}
}
当你定义反重力的大小为 gravity 大小时 ,即ant_gravity = new b2Vec2(0.0,-10.0*bb.GetMass());
circleBody 会慢慢的(非常的慢)向下运动 因为在调用upData()时中存在停顿,即上面的侦听器EnterFrame事件
的帧之间的间隔导致。
还有另外一种方法 :就是修改b2Island源码!此处不在介绍 。
本文介绍如何在Box2D物理引擎中为指定物体实现反重力效果,通过计算并应用与世界重力相反的力来抵消原有重力的影响。此外,还讨论了当设置完全相反的力时物体的行为表现。
2269

被折叠的 条评论
为什么被折叠?



