lufy 发表于 2016-2-15 11:54:50

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:34

老大真是热心肠

含笑半步癫 发表于 2016-2-15 17:01:45

谢谢 老大!!!!!!是我发的邮件!
页: [1]
查看完整版本: Box2dWeb如何自定义重力