lufy's legend

标题: Box2dWeb如何自定义重力 [打印本页]

作者: lufy    时间: 2016-2-15 11:54
标题: Box2dWeb如何自定义重力
有朋友问我如何把Box2dWeb的重力方向指定到某一个点,
这个问题显然跟lufylegend其实没什么关系,我一般的回答都是让其先去熟悉下Box2d的API,
不过,既然大过年的,我就简单弄个例子,也让以后遇到问题的人有个借鉴。

这个问题对于熟悉Box2d的人来说,估计也不算什么,就是自定义一个b2Controller类而已,其实Box2dWeb的代码也没那么多,有心学习的话,多看看源码,能解决大部分问题。
下面定义一个b2ConstantMyForceController类,向量F就是自定义重力的指向了
  1.    /**
  2.                          * 自定义b2Controller类
  3.                          * */
  4.                         function b2ConstantMyForceController() {
  5.                                 b2ConstantMyForceController.b2ConstantMyForceController.apply(this, arguments);
  6.                         };
  7.                         Box2D.Dynamics.Controllers.b2ConstantMyForceController = b2ConstantMyForceController;
  8.                         Box2D.inherit(b2ConstantMyForceController, Box2D.Dynamics.Controllers.b2Controller);
  9.                         b2ConstantMyForceController.prototype.__super = Box2D.Dynamics.Controllers.b2Controller.prototype;
  10.                         b2ConstantMyForceController.b2ConstantMyForceController = function() {
  11.                                 Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this, arguments);
  12.                                 this.F = new LGlobal.box2d.b2Vec2(0, 0);
  13.                         };
  14.                         b2ConstantMyForceController.prototype.Step = function(step) {
  15.                                 for (var i = this.m_bodyList; i; i = i.nextBody) {
  16.                                         var body = i.body;
  17.                                         if (!body.IsAwake())
  18.                                                 continue;
  19.                                         var f = this.F.Copy();
  20.                                         f.Subtract(body.GetPosition());
  21.                                         f.Normalize();
  22.                                         f.Multiply(10);
  23.                                         body.ApplyForce(f, body.GetWorldCenter());
  24.                                 }
  25.                         };
复制代码
b2Controller的用法也很简单
  1. var forceController = new b2ConstantMyForceController();
  2. forceController.AddBody(box2dBody);
  3. 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