我最近一直试图回到LibGDX的Box2D版本,我回顾了几个月前创建的一个演示,我的代码看起来很好,从我的Google搜索结果中,我的代码很好,但对于我的生活,我无法让Fixture
渲染。
这是我的(极简主义示例)代码,对于我的生活,我无法让它工作注意:我在LibGDX Game
类周围构建了一个包装器,应该是不言自明的< / EM>:
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 :(得分:0)
问题的可能原因。
检查您是否在render
班级或RayHandler
班级中对灯具发出了Box2DDebugRenderer
。
您尚未设置圆形的位置。它可能位于边缘,并且不在镜头范围内。
检查您的单位。圆的半径可能相对较小,以至于它不可见,或者可能很大,以至于它可能覆盖整个屏幕。
希望这有帮助。
答案 1 :(得分:0)
您可以尝试以下方法,其中一项提到Tanmay Patil,它调整了身体的大小:
示例:
可变类:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>svg preloader</title>
<script src="http://okwutelabs.com/js/jquery-1.11.1.min.js"></script>
<script src="http://okwutelabs.com/js/jquery.lazylinepainter-1.1.min.js"></script>
<script src="http://okwutelabs.com/js/raphael-min.js"></script>
</head>
<body>
<!-- Preloader -->
<div id="preloader">
<div id="status">
<div id="icons"></div>
</div>
</div>
<!-- #Preloader -->
<img src="http://www.jesuspaintings.com/pictures/field_of_dreams_big.jpg" alt="">
<img src="http://www.sinoorigin.com/images/modern-landscape/large/modern-landscape-painting-012.jpg" alt="">
<img src="http://s3.amazonaws.com/artspan-fs/member_files/nmistry/Adirondack_Fall.JPG" alt="">
</body>
</html>
调用渲染方法:
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);
}
答案 2 :(得分:0)
固定。
问题是我在RayHandler#render()
之后尝试拨打Box2DDebugRenderer.render(...)
而RayHandler
没有任何Light
个对象(添加PointLight
允许它渲染),但无论原因是什么,它都很奇怪,但首先调用RayHandler#render()
允许它工作。这可能是我将报告的LibGDX
中的错误。