Java 如何在scene2d中为演员添加(鼠标)关节

Java 如何在scene2d中为演员添加(鼠标)关节,java,libgdx,box2d,scene2d,Java,Libgdx,Box2d,Scene2d,如果我有一个具有以下内容的GameStage: ... public GameStage() { world = WorldUtils.createWorld(); setUpWorld(); setupCamera(); debugRenderer = new Box2DDebugRenderer(); } private void setUpWorld() { world = WorldUtils.createWorld(); world.s

如果我有一个具有以下内容的GameStage:

...
public GameStage() {
    world = WorldUtils.createWorld();
    setUpWorld();
    setupCamera();
    debugRenderer = new Box2DDebugRenderer();
}

private void setUpWorld() {
    world = WorldUtils.createWorld();
    world.setContactListener(this);
    setupGround();
    setupBall();
    setupJoint();
}

private void setupBall() {
    ball = new Ball(WorldUtils.createBall(world));
    addActor(ball);
}

private void setupGround() {
    ground = new Ground(WorldUtils.createGround(world));
    addActor(ground);
}

private void setupJoint() {
    jointDef = new MouseJointDef();
    jointDef.bodyA = ???
    jointDef.collideConnected = true;
    jointDef.maxForce = 50f;
}
...
如何引用每个参与者内的身体,以便在两个身体之间添加关节。具体来说,我试图在球身上添加一个鼠标点,这样我可以添加一个方向脉冲(鼠标点在触地时被破坏,或者如果达到最大脉冲)。在setupJoint方法中,我将地面设置为bodyA。在触地得分法中,我把身体B作为球。然后,我通过触摸找到x和y值(首先取消投影以从世界坐标移动到本地坐标),并使用jointDef.target.set设置鼠标的位置。我的问题是我无法从演员那里弄到尸体。下面是WorldUtils类中我的createBall方法的一个示例

...
public static Body createBall(World world) {
    // BALL
    // Body Definition
    BodyDef ballDef = new BodyDef();
    ballDef.type = BodyDef.BodyType.DynamicBody;
    ballDef.position.set(0, 10); // 1 Meter up not 1 pixel

    // Ball shape
    CircleShape ballShape = new CircleShape();
    ballShape.setRadius(.5f);

    // Fixture Definition
    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.shape = ballShape;
    fixtureDef.density = 2.0f;
    fixtureDef.friction = .5f; // 0 to 1
    fixtureDef.restitution = .5f; // 0 to 1

    Body body = world.createBody(ballDef);
    body.createFixture(fixtureDef);
    body.resetMassData();
    body.setUserData(new BallUserData());
    ballShape.dispose();
    return body;
}
...
我的球和场地是这样定义的

...
public class Ground extends GameActor {
  public Ground(Body body) {
    super(body);
  }

  @Override
  public GroundUserData getUserData() {
    return (GroundUserData) userData;
  }
}
我确信我在做一些愚蠢的事情,或者我不明白scene2d和box2d之间的联系是如何工作的


谢谢

难道不能将body存储为actor类的类成员变量吗?是的,我找到了答案,我就是这么做的。在我的例子中,我把它放在GameActor中,它扩展了Actor。谢谢