lufy's legend
标题:
Box2dWeb如何自定义重力
[打印本页]
作者:
lufy
时间:
2016-2-15 11:54
标题:
Box2dWeb如何自定义重力
有朋友问我如何把Box2dWeb的重力方向指定到某一个点,
这个问题显然跟lufylegend其实没什么关系,我一般的回答都是让其先去熟悉下Box2d的API,
不过,既然大过年的,我就简单弄个例子,也让以后遇到问题的人有个借鉴。
这个问题对于熟悉Box2d的人来说,估计也不算什么,就是自定义一个b2Controller类而已,其实Box2dWeb的代码也没那么多,有心学习的话,多看看源码,能解决大部分问题。
下面定义一个b2ConstantMyForceController类,向量F就是自定义重力的指向了
/**
* 自定义b2Controller类
* */
function b2ConstantMyForceController() {
b2ConstantMyForceController.b2ConstantMyForceController.apply(this, arguments);
};
Box2D.Dynamics.Controllers.b2ConstantMyForceController = b2ConstantMyForceController;
Box2D.inherit(b2ConstantMyForceController, Box2D.Dynamics.Controllers.b2Controller);
b2ConstantMyForceController.prototype.__super = Box2D.Dynamics.Controllers.b2Controller.prototype;
b2ConstantMyForceController.b2ConstantMyForceController = function() {
Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this, arguments);
this.F = new LGlobal.box2d.b2Vec2(0, 0);
};
b2ConstantMyForceController.prototype.Step = function(step) {
for (var i = this.m_bodyList; i; i = i.nextBody) {
var body = i.body;
if (!body.IsAwake())
continue;
var f = this.F.Copy();
f.Subtract(body.GetPosition());
f.Normalize();
f.Multiply(10);
body.ApplyForce(f, body.GetWorldCenter());
}
};
复制代码
b2Controller的用法也很简单
var forceController = new b2ConstantMyForceController();
forceController.AddBody(box2dBody);
LGlobal.box2d.world.AddController(forceController);
复制代码
也没什么需要特殊说明的,demo链接如下
http://lufylegend.com/demo/test/119.html
作者:
pn123456
时间:
2016-2-15 12:51
老大真是热心肠
作者:
含笑半步癫
时间:
2016-2-15 17:01
谢谢 老大!!!!!!是我发的邮件!
欢迎光临 lufy's legend (http://lufylegend.com/forum/)
Powered by Discuz! X2.5