Libgdx 有一个 body 没有精灵
Libgdx there is one body without sprite
int amoumt = 10;
int i = 1;
while (i < amoumt+1)
{
box(1);//body
i++;
}
如果我使用这种方法,我会得到 9 个有精灵的身体和一个 body 没有精灵的身体。
但是我在所有这些上都画了一个精灵
在渲染方法中,用于在 each 上绘制精灵 body:
batch.begin();
world.getBodies(worldBodies);
for (Body body : worldBodies) {
if (body.getUserData() instanceof Sprite) {
Sprite sprite = (Sprite) body.getUserData();
Vector2 position = body.getPosition();
sprite.setPosition(position.x - sprite.getWidth() / 2,position.y - sprite.getHeight() / 2);
sprite.setRotation(body.getAngle() * MathUtils.radiansToDegrees);
sprite.draw(batch);
}
}
batch.end();
}
Body:
private Body box(float a)
{
BodyDef bodyDef = new BodyDef();
bodyDef.position.set(0,0);
bodyDef.type = BodyType.DynamicBody;
PolygonShape polygonShape=new PolygonShape();
polygonShape.setAsBox(a,a);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape=polygonShape;
fixtureDef.density=2;
fixtureDef.restitution=0.5f;
fixtureDef.friction=0.5f;
Body box=world.createBody(bodyDef);
box.createFixture(fixtureDef);
box.setUserData(sprite);
sprite = new Sprite(new Texture("android.jpg"));
sprite.setSize(a*2,a*2);
sprite.setOrigin(sprite.getWidth() / 2, sprite.getHeight() / 2);
worldBodies = new Array<Body>();
return box;
}
据我所知,您设置为用户数据的 sprite 在您创建第一个盒子时并未初始化。在将用户数据设置为精灵之前尝试移动 sprite = new sprite
初始化行。
我想这会解决你的问题
private Body box(float a)
{
BodyDef bodyDef = new BodyDef();
bodyDef.position.set(0,0);
bodyDef.type = BodyType.DynamicBody;
PolygonShape polygonShape=new PolygonShape();
polygonShape.setAsBox(a,a);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape=polygonShape;
fixtureDef.density=2;
fixtureDef.restitution=0.5f;
fixtureDef.friction=0.5f;
Body box=world.createBody(bodyDef);
box.createFixture(fixtureDef);
sprite = new Sprite(new Texture("android.jpg"));
sprite.setSize(a*2,a*2);
sprite.setOrigin(sprite.getWidth() / 2, sprite.getHeight() / 2);
box.setUserData(sprite);
worldBodies = new Array<Body>();
return box;
}
希望对您有所帮助!
int amoumt = 10;
int i = 1;
while (i < amoumt+1)
{
box(1);//body
i++;
}
如果我使用这种方法,我会得到 9 个有精灵的身体和一个 body 没有精灵的身体。 但是我在所有这些上都画了一个精灵
在渲染方法中,用于在 each 上绘制精灵 body:
batch.begin();
world.getBodies(worldBodies);
for (Body body : worldBodies) {
if (body.getUserData() instanceof Sprite) {
Sprite sprite = (Sprite) body.getUserData();
Vector2 position = body.getPosition();
sprite.setPosition(position.x - sprite.getWidth() / 2,position.y - sprite.getHeight() / 2);
sprite.setRotation(body.getAngle() * MathUtils.radiansToDegrees);
sprite.draw(batch);
}
}
batch.end();
}
Body:
private Body box(float a)
{
BodyDef bodyDef = new BodyDef();
bodyDef.position.set(0,0);
bodyDef.type = BodyType.DynamicBody;
PolygonShape polygonShape=new PolygonShape();
polygonShape.setAsBox(a,a);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape=polygonShape;
fixtureDef.density=2;
fixtureDef.restitution=0.5f;
fixtureDef.friction=0.5f;
Body box=world.createBody(bodyDef);
box.createFixture(fixtureDef);
box.setUserData(sprite);
sprite = new Sprite(new Texture("android.jpg"));
sprite.setSize(a*2,a*2);
sprite.setOrigin(sprite.getWidth() / 2, sprite.getHeight() / 2);
worldBodies = new Array<Body>();
return box;
}
据我所知,您设置为用户数据的 sprite 在您创建第一个盒子时并未初始化。在将用户数据设置为精灵之前尝试移动 sprite = new sprite
初始化行。
我想这会解决你的问题
private Body box(float a)
{
BodyDef bodyDef = new BodyDef();
bodyDef.position.set(0,0);
bodyDef.type = BodyType.DynamicBody;
PolygonShape polygonShape=new PolygonShape();
polygonShape.setAsBox(a,a);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape=polygonShape;
fixtureDef.density=2;
fixtureDef.restitution=0.5f;
fixtureDef.friction=0.5f;
Body box=world.createBody(bodyDef);
box.createFixture(fixtureDef);
sprite = new Sprite(new Texture("android.jpg"));
sprite.setSize(a*2,a*2);
sprite.setOrigin(sprite.getWidth() / 2, sprite.getHeight() / 2);
box.setUserData(sprite);
worldBodies = new Array<Body>();
return box;
}
希望对您有所帮助!