我已经被困了三天了。
我在两个独立的函数中创建了两个实体。每个函数都返回正文。
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类中。我尝试过私有,公共,静态函数。我在这里没有想法。
答案 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));