2015-04-23 23 views
0

我最近一直在试图回到LibGDX的Box2D版本,我回头看了几个月前创建的演示,并且我的代码看起来很好,并且从我的Google搜索结果,我的代码很好,但对于我的生活,我无法得到Fixture呈现。LibGDX Box2D:无法获取灯具

这是我的(简约例子)的代码,并为我的生活,我不能得到它的工作注:我建围绕LibGDX Game类的包装,应该是不言自明

public class TestBox2D extends EGGame { 

    int width; 
    int height; 

    static final Vector2 ZERO_GRAVITY = new Vector2(0f, 0f); 

    OrthographicCamera camera; 
    World world; 
    Body body; 
    Box2DDebugRenderer box2dDebugRenderer; 
    RayHandler rayHandler; 

    ... // Removed Constructor, nothing special here. 

    @Override 
    protected void init() { 
     width = Gdx.graphics.getWidth()/2; 
     height = Gdx.graphics.getHeight()/2; 
     camera = new OrthographicCamera(width, height); 
     camera.position.set(width/2, height/2, 0); 
     camera.update(); 

     world = new World(ZERO_GRAVITY, true); 
     box2dDebugRenderer = new Box2DDebugRenderer(); 
     rayHandler = new RayHandler(world); 
     rayHandler.setCombinedMatrix(camera.combined); 

     // creating Body 
     BodyDef bodyDef = new BodyDef(); 
     bodyDef.type = BodyDef.BodyType.StaticBody; 
     bodyDef.position.set(width/2, height/2); 

     body = world.createBody(bodyDef); 

     CircleShape shape = new CircleShape(); 
     shape.setRadius(1f); 

     FixtureDef fixtureDef = new FixtureDef(); 
     fixtureDef.shape = shape; 
     body.createFixture(fixtureDef); 

    } 

    @Override 
    protected void updateGame() { 
     world.step(1f/30f, 6, 2); 
     rayHandler.update(); 
    } 

    @Override 
    protected void renderGame() { 
     box2dDebugRenderer.render(world, camera.combined); 
     rayHandler.render(); 
    } 

    @Override 
    public void dispose() { 
     world.dispose(); 
    } 

    ... // Removed main method, nothing special here. 
} 

请注意,world.getBodyCount();world.getFixtureCount();均为return 1

回答

0

固定。

的问题是,我试图调用RayHandler#render()Box2DDebugRenderer.render(...)后而RayHandler没有任何Light对象(添加PointLight允许它渲染),但无论它的原因,它的怪异,但在调用RayHandler#render()首先允许它工作。这可能是我会报告的LibGDX中的一个错误。

0

问题的可能原因。

  1. 检查一下您是否在任一RayHandler类或Box2DDebugRenderer类灯具被称为render

  2. 您尚未设置圆形的位置。它可能躺在边缘,并保持在相机边界之外。

  3. 检查你的单位。圆的半径可能相对很小以至于不可见,或者它可能很大以至于可能覆盖整个屏幕。

希望这会有所帮助。

0

你可以试试下面的事情之一提Tanmay帕蒂尔,它会调整身体:

例子:

Varible类:

long time = 0; 
float testSize = 0; 

呼叫在您的渲染方法:

time += System.nanoTime(); 
    if (time >= 100000000){ 
     time = 0; 
     testSize += (0.1f); 
     body.getFixtureList().first().getShape().setRadius(testSize); 
    } 

如果没有注意到任何变化,请尝试相反的操作:

time += System.nanoTime(); 
    if (time >= 100000000){ 
     time = 0; 
     testSize -= (0.1f); 
     body.getFixtureList().first().getShape().setRadius(testSize); 
    } 

编辑:

在另一方面,这并不影响这个问题,但你可以叫,如果你想在这里处理:

.//////////// 

    CircleShape shape = new CircleShape(); 
    shape.setRadius(1f); 

    FixtureDef fixtureDef = new FixtureDef(); 
    fixtureDef.shape  = shape; 
    body.createFixture(fixtureDef); 

    shape.dispose(); 
}