LibGDX绘图圆圈以某种方式缩放

时间:2015-03-15 09:47:29

标签: java libgdx image-scaling

我尝试使用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);

这就是结果: Strange scaling on the balls

以某种方式使用相同大小的圆圈,在远离原点放置时缩放它们。目前我的主类扩展了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();

black balls on top

最终编辑:

batch.draw(sprite, circle.x-circle.radius, circle.y-circle.radius, circle.radius*2, circle.radius*2);

诀窍!

1 个答案:

答案 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);
}

这将根据圆的半径缩放对象。

参考:http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/Batch.html#draw-com.badlogic.gdx.graphics.Texture-float-float-float-float-