gpt4 book ai didi

java - 碰撞后如何使两个物体粘在一起?

转载 作者:搜寻专家 更新时间:2023-11-01 02:26:35 24 4
gpt4 key购买 nike

我真的卡在这上面了,我可以成功检测到碰撞,但我无法让参与碰撞的两个物体粘在一起。

这是我的ContactListener

world.setContactListener(listener);

listener = new ContactListener() {

@Override
public void preSolve(Contact contact, Manifold oldManifold) {

}


@Override
public void postSolve(Contact contact, ContactImpulse impulse) {

}

//called when two fixtures cease to touch
@Override
public void endContact(Contact contact) {
Fixture fixtureA = contact.getFixtureA();
Fixture fixtureB = contact.getFixtureB();
Gdx.app.log("beginContact", "between" + fixtureA.toString() + "and" + fixtureB.toString());
}

//called when two fixtures begin to touch
@Override
public void beginContact(Contact contact) {
Fixture fixtureA = contact.getFixtureA();
Fixture fixtureB = contact.getFixtureB();
Gdx.app.log("beginContact", "between" + fixtureA.toString() + "and" + fixtureB.toString());
}
};

这也是我在 world.step() 行之后直接放入 render() 的内容

int numContacts = world.getContactCount();

if(numContacts > 0)
{
Gdx.app.log("contact", "start of contact list");
for(Contact contact: world.getContactList())
{
Fixture fixtureA = contact.getFixtureA();
Fixture fixtureB = contact.getFixtureB();
Gdx.app.log("contact", "between" + fixtureA.toString() + "and" + fixtureB.toString());
}
Gdx.app.log("contact", "end of contact list");
}

我非常困惑在解决后或解决前要放什么,真的很困惑。我跟着 iforce2d sticky projectiles http://www.iforce2d.net/b2dtut/sticky-projectiles但我不了解 C++,在 eclipse 中工作时遇到很多语法错误。请有人能告诉我一个工作碰撞的示例代码,请在 java 中碰撞后 body 粘在一起。

最佳答案

这就是您创建 WeldJoint 的方式使用 libgdx 包装器:

WeldJointDef wd = new WeldJointDef();
wd.bodyA = body1;
wd.bodyB = body2;
wd.referenceAngle = wd.bodyB.getAngle() - wd.bodyA.getAngle();
world.createJoint( wd );

不要尝试在 ContactListener 中创建关节。将要粘贴的物体添加到列表中,并在 world.step 之后检查它们。

编辑:

好的,就像在 iforce2d tutorial 中一样,创建一个包含 2 个主体的对象:

public class StickyInfo{
Body bodyA;
Body bodyB;
public StickyInfo(Body bodyA, Body bodyB){
this.bodyA = bodyA;
this.bodyB = bodyB;
}
};

然后创建一个libgdx Array StickyInfo 的

Array<StickyInfo> collisionsToMakeSticky = new Array<StickyInfo>();

当物体发生碰撞时(嗯,从技术上讲是它们的固定装置),将它们添加到此列表中:

collisionsToMakeSticky.add(new StickyInfo(body1, body2))

然后在 world.step 之后,如果数组不为空。创建焊接接头:

while(collisionsToMakeSticky.size>0){
StickyInfo si = collisionsToMakeSticky.removeIndex(0);
//Make the WeldJoint with the bodies si.bodyA and si.bodyB
}

关于java - 碰撞后如何使两个物体粘在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21293923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com