在Box2D中从单独函数中的主体创建一个关节

时间:2015-03-06 21:03:19

标签: function flash box2d

我已经被困了三天了。

我在两个独立的函数中创建了两个实体。每个函数都返回正文。

function createPlayerBody():b2Body
        {

                bd.type = b2Body.b2_dynamicBody;
                box = new b2PolygonShape();
                box.SetAsBox(50 / PIXELS_TO_METRE, 25 / PIXELS_TO_METRE);
                fixtureDef.shape = box;
                bodyfixtureDef.shape = box;
                fixtureDef.filter.maskBits = MASK_PLAYER;
                fixtureDef.density = 1.0;
                fixtureDef.friction = 0.4;
                fixtureDef.restitution = 0.1;
                bd.position.Set(startX / PIXELS_TO_METRE, (startY + 32) / PIXELS_TO_METRE);
                var torso1:b2Body = _world.CreateBody(bd);

                torso1.CreateFixture(fixtureDef);
                torso1.CreateFixture(bodyfixtureDef);


                return torso1;


        }


        public function createPlayer():b2Body
        {

                // Head
                bd.type = b2Body.b2_dynamicBody;
                box = new b2PolygonShape();
                fixtureDef.shape = box;
                bodyfixtureDef.shape = box;
                fixtureDef.filter.maskBits = MASK_PLAYER;
                fixtureDef.density = 1.0;
                fixtureDef.friction = 0.4;
                fixtureDef.restitution = 0.3;
                box.SetAsBox(36 / PIXELS_TO_METRE, 25 / PIXELS_TO_METRE);
                bd.position.Set(startX / PIXELS_TO_METRE, startY / PIXELS_TO_METRE);
                var head:b2Body = _world.CreateBody(bd);

                head.CreateFixture(fixtureDef);
                head.CreateFixture(bodyfixtureDef);

                //_balls.push(new Ball(createPlayerBody(), new PlayerBody()));              
                //var body = createPlayerBody();
                return head;


        }

非常直截了当。但现在我想在他们之间建立联系。这不可能。我尝试了大约25种不同的方法来建议访问torso1和head变量。但它们总是为NULL。

以下是创建关节的代码。

jd.lowerAngle = -40 / (180/Math.PI);
                jd.upperAngle = 40 / (180/Math.PI);
                jd.Initialize(body, head, new b2Vec2(startX / PIXELS_TO_METRE, (startY + 15) / PIXELS_TO_METRE));
                _world.CreateJoint(jd); 

我一直在读书,寻找允许发生这种情况的方法。

问题是使用额外参数(纹理)调用函数,因此无法更改或合并它们。

_objects.push(new Object(createPlayer(), new PlayerImage()));
_objects.push(new Object(createPlayerBody(), new PlayerBody()));

我尝试将head变量设置为等于函数,但是我不能包含texture参数。我已经尝试过各种方式使它们全局或普遍可访问,但在这种情况下它不起作用。我怀疑一旦函数完成就会破坏变量。我搜索了变量列表,甚至打印出14页变量,并没有在任何地方看到'head'或'torso1'。

我想知道为什么我无法访问它们。我想知道在变量访问它之前我需要放什么。

我试过Object:head,_object:head,_world._body._m_world.GetBody(),GetBody(head)。 b2Body:head,head:b2Body,Object:b2Body.head和许多其他人。我尝试将函数放在一个单独的文件中。我尝试将它们放在Object类中。我尝试过私有,公共,静态函数。我在这里没有想法。

1 个答案:

答案 0 :(得分:0)

在您的情况下,您执行两个功能。然后获取数组中的最后两项。

var objectA: Ball = _object[_object.length-1];
var objectB: Ball = _object[_object.length-2];

并像这样初始化关节。

jd.Initialize(objectA.body, objectB.body new b2Vec2(startX / PIXELS_TO_METRE, (startY + 15) / PIXELS_TO_METRE));