2017-10-10 101 views
1

我一直在寻找一些其他线程,尽管我已经尝试过的每一件事情,我在box2d中创建的形状不是呈现。这是非常奇怪的,我希望你们能提供一个解决方案。Box2D形状不渲染

public class worldRender { 
fighterGame game; 
PlayScreen renderGame; 
private Viewport gamePort = new StretchViewport(1020/game.PPM,760/game.PPM); 
World world = new World(new Vector2(0,-10), true); 
Box2DDebugRenderer b2dr = new Box2DDebugRenderer(); 
private OrthographicCamera gameCam = new OrthographicCamera(); 
BodyDef bDef = new BodyDef(); 
public Body b2body; 
FixtureDef fixtureDef = new FixtureDef(); 
ShapeRenderer shapeRender; 


public worldRender() { 

    gameCam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
    gameCam.position.set(1020/2, 760/2, 0); 


} 

public worldRender(float dt) { 

    gameCam.update(); 
    world.step(1/60f, 6, 2); 


    b2dr.render(world, gameCam.combined); 
    bodyRender(); 

} 
public void bodyRender() { 

    BodyDef bdef = new BodyDef(); 
    bdef.position.set(0.0f/game.PPM,4.0f/game.PPM); 
    bdef.type = BodyDef.BodyType.DynamicBody; 
    b2body = world.createBody(bdef); 
    FixtureDef fdef = new FixtureDef(); 
    fdef.friction = 0.25f; 
    CircleShape shape = new CircleShape(); 
    shape.setRadius(5); 
    fdef.shape = shape; 
    fdef.density = 1.0f; 
    b2body.createFixture(fdef); 


} 

}

+0

是什么PPM'的'的价值,它是静态不变?,所有'gameCam'视首先不是取决于'gamePort'但你的视口参数定义位置。此外,您的代码不完整......您是在调用哪种方法 – Aryan

+0

对于任何有兴趣的人,这个问题在这里进一步讨论:https://www.reddit.com/r/libgdx/comments/75lio3/box2d_shapes_not_rendering/ –

+0

您是否在每次渲染场景时都创建'worldRender'的新实例?什么时候调用'worldRender(float dt)'? –

回答

0

我要去,因为不是一切都在片段明确列出过了几个解决方案:

  1. 你确定worldRender()方法正在运行
    • 如果您使用的游戏画面,并确保你的游戏渲染()方法调用超(),否则你的屏幕呈现()方法将无法运行;
  2. 如前所述,PPM的价值是正确的/它是什么?

这是否抽奖:

// First we create a body definition 
BodyDef bodyDef = new BodyDef(); 
bodyDef.type = BodyType.StaticBody; 

// Set our body's starting position in the world 
bodyDef.position.set(50, 50); 

// Create our body in the world using our body definition 
Body body = world.createBody(bodyDef); 

// Create a circle shape and set its radius to 6 
CircleShape circle = new CircleShape(); 
circle.setRadius(10f); 

// Create a fixture definition to apply our shape to 
FixtureDef fixtureDef = new FixtureDef(); 
fixtureDef.shape = circle; 

// Create our fixture and attach it to the body 
Fixture fixture = body.createFixture(fixtureDef); 

// Remember to dispose of any shapes after you're done with them! 
// BodyDef and FixtureDef don't need disposing, but shapes do. 
circle.dispose(); 

这应该在x = 10画出半径为10的圆,Y = 10(确保这些点在你的视口

+0

是的程序的这些部分正在运行,我已经在这些部分做了println测试,并且确实出现了。 PPM是100 – SkinnySpangler

0

我会的。建议清理你的代码了一下,学习一些更多的教程,这可能会解决你的问题,但是,让我们给你一些提示,让你在路上:

我有点怀疑你正在创建一个worldRender对象每一帧。 Java是一个ga垃圾收集语言,这样做会严重影响你的表现。坚持尽可能多的物体。在我的大型游戏中,我创建了每个渲染和游戏逻辑刻度的0对象旁边。瞄准那个。

最后,什么可能会解决你的问题:你用它来使您的box2ddebugrenderer(“dbrndr”)的相机屏幕像素为单位。 dbrndr使用米作为渲染单元。您需要以米为单位给dbrndr自己的相机。您目前的方法将在左下角的0/4像素处绘制一个10像素宽的圆圈。

你用重力打造你的世界?如果是的话,这个圈子会立即从你的屏幕上掉下来......是的。

事实上,你甚至可以看到你在左下角splitsecond圈开始......因为你使你的Box2D逻辑之前后。

请Dispose()方法创建的所有对象,否则他们占用内存事后又没有free'd。