我尝试使用LibGDX在Java中使用纹理绘制2个圆圈。 我的类很简单,GameObject有一个圆圈(用于逻辑)和一个绘图方法。
这是我的绘制方法:
@Override
public void draw(Batch batch, float alpha){
batch.draw(sprite, circle.x-circle.radius, circle.y-circle.radius, circle.x+circle.radius, circle.y+circle.radius);
}
这是我执行的代码:
GameObject go = new GameObjectBuilder().createNew()
.withPosition(32, 32)
.withRadius(32)
.withTexture(new Texture(Gdx.files.internal("ball.png")))
.withId(0)
.build();
GameObject go2 = new GameObjectBuilder().createNew()
.withPosition(64, 64)
.withRadius(32)
.withTexture(new Texture(Gdx.files.internal("ball.png")))
.withId(1)
.build();
stage.addActor(go);
stage.addActor(go2);
这就是结果:
以某种方式使用相同大小的圆圈,在远离原点放置时缩放它们。目前我的主类扩展了ApplicationAdapter,就是这样。
这是我在构建器中进行的一系列调用。
circle.setPosition(x, y); // LibGDX.Circle class call
circle.setRadius(radius); // LibGDX.Circle class call
sprite = new Sprite(texture);
使用ShapeRenderer,调用相同的对象并绘制实心圆圈会产生以下结果:
shapeRenderer.setColor(Color.BLACK);
shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
for(GameObject goo : objects.values()) {
shapeRenderer.circle(goo.getX(), goo.getY(), goo.getRadius());
}
shapeRenderer.end();
最终编辑:
batch.draw(sprite, circle.x-circle.radius, circle.y-circle.radius, circle.radius*2, circle.radius*2);
诀窍!
答案 0 :(得分:1)
因为我使用过libGDX已经有一段时间了,我可以说一些事情已经改变了。然而...
void draw(TextureRegion region,
float x,
float y,
float width,
float height)
在x,y处绘制一个左下角的矩形,并拉伸该区域以覆盖给定的宽度和高度。
Batch.draw绘制一个从x,y到x +宽度,y +高度的矩形。您所做的是根据对象内部位置缩放形状。
@Override
public void draw(Batch batch, float alpha){
batch.draw(sprite, circle.x-circle.radius, circle.y-circle.radius, circle.x+circle.radius, circle.y+circle.radius);
}
我们有圈子1的batch.draw(sprite,32-32,32-32,32 + 32,32 + 32); 这会将精灵从0,0画到64,64
对于第2圈我们有 batch.draw(sprite,64-32,64-32,64 + 64,64 + 64); 这将精灵从32,32绘制到128,128
这应修复您的代码:
@Override
public void draw(Batch batch, float alpha){
batch.draw(sprite, circle.x, circle.y, circle.radius, circle.radius);
}
这将根据圆的半径缩放对象。