- 注册时间
- 2013-2-13
- 最后登录
- 2023-10-13
- 阅读权限
- 200
- 积分
- 9312
- 精华
- 1
- 帖子
- 2411
|
有朋友问我如何把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 |
|