如何用Java显示/可视化JBox2D世界

如何用Java显示/可视化JBox2D世界,java,swing,jframe,jbox2d,Java,Swing,Jframe,Jbox2d,我根据FlashDevelop教程编写了一个JBox2D应用程序。从命令行来看,一切似乎都很好,我现在的问题是如何在JFrame中显示世界,或者使用另一种可视化方法。我试着画画,但完全迷路了。提前谢谢 public class GameWorld implements StepListener { protected B2World b2World; protected World world; protected WorldView worldView; private B2Body fall

我根据FlashDevelop教程编写了一个JBox2D应用程序。从命令行来看,一切似乎都很好,我现在的问题是如何在JFrame中显示世界,或者使用另一种可视化方法。我试着画画,但完全迷路了。提前谢谢

public class GameWorld implements StepListener {
protected B2World b2World;
protected World world;
protected WorldView worldView;
private B2Body fallingCrate;
public static final JFrame frame = new JFrame("Platformer Game");
    ...
    ...

public GameWorld() {
    world = new World();
    worldView = new WorldView(world, (int)XAXIS, (int)YAXIS);
    setUpWorld();
    createWorldBodies();
    addCrates();
    world.addStepListener(this);
    b2World.step((float)1/30, 10);
    frame.add(worldView);
    frame.pack();
    frame.setResizable(false);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    world.start();
}

private void addCrates() {
    PolygonDef fallingBodyDef = new PolygonDef();
    fallingBodyDef.setAsBox(25f/RATIO, 25f/RATIO);
    setPhysicsProperties(fallingBodyDef, false); // set density, friction, restitution
    BodyDef crateDef = new BodyDef();
    crateDef.position.set(250f/RATIO, -30f/RATIO);
    crateDef.angle = (float) (30 * Math.PI / 180);
    fallingCrate = b2World.createBody(crateDef);
    fallingCrate.createShape(fallingBodyDef);
    fallingCrate.setMassFromShapes();
}

private void createWorldBodies() {
    PolygonDef tallBlockDef = new PolygonDef();
    tallBlockDef.setAsBox(5f/RATIO, 195f/RATIO);
    setPhysicsProperties(longBlockDef, true);
    BodyDef wallDef = new BodyDef();
    wallDef.position.set(5f/RATIO, 195f/RATIO);
    B2Body leftWall = b2World.createBody(wallDef);
    leftWall.createShape(tallBlockDef);
    leftWall.setMassFromShapes();
    ...
            ...
}

private void setUpWorld() {
    AABB universeSize = new AABB();
    universeSize.lowerBound.set(-3000f/RATIO, -3000f/RATIO);
    universeSize.upperBound.set(3000f/RATIO, 3000f/RATIO);
    Vec2 gravity = new Vec2(0f, 9.8f);
    boolean ignoreSleeping = true;
    b2World = new B2World(universeSize, gravity, ignoreSleeping);
}
    ...
    ...
    public static void main(String[] args) {
            new GameWorld();
    }

如果您正在使用j2d绘图,则可以从测试台获取。如果您只是想尝试一些物理模拟,那么还有一个不错的页面可以创建您自己的测试台测试

如果您正在创建自己的游戏或产品,则需要熟悉DebugDraw和使用视口变换(以便您可以在世界坐标和视图坐标之间进行变换,反之亦然)。JBox2D也有一个类来帮助您,名为