LibGDX从使用变换投影矩阵绘制的TextureRegion获取坐标?

时间:2017-12-16 00:04:18

标签: java opengl libgdx

基本上,我的代码是这样的:

我有一个名为cam的正交相机和一个名为batch的精灵批次。

    cam = new OrthographicCamera();
    cam.setToOrtho(true, 136, gameHeight);

    batcher = new SpriteBatch();
    batcher.setProjectionMatrix(cam.combined);

我想要的是在InputProcessor类中创建一个矩形,其具有与使用精灵批处理绘制的纹理区域相同的x,y,宽度和高度,以便我可以触摸检测该纹理。

    batcher.draw(Rock, 30, 30, 80, 25);

但是当我使用“Rock.getTextureRegion.y”或“x”作为我的Bounds矩形的参数时,界限非常不同。

是否因为投影类中没有投影矩阵?我是否需要为该Input类创建一个视口?

或者无论如何要分配正确的坐标?

1 个答案:

答案 0 :(得分:1)

TextureRegion的x,y,width和height参数是定义它所覆盖的Texture区域的坐标,因此它们与在屏幕上绘制TextureRegion的位置无关。

实际上,TextureRegion对象不包含有关绘制位置的任何数据。当您调用batch.draw(rock, ....)时,批处理将这些坐标传递给OpenGL,但它不会以任何方式修改TextureRegion对象。

你应该做的是创建一个包含与你正在做的事情相关的参数的类。例如:

public class MyButton {
    public TextureRegion textureRegion;
    public float x, y, width, height;
}

然后您可以为其所有参数设置值,并将其用于使用批处理和输入处理器进行绘制:

batch.draw(myButton.textureRegion, myButton.x, myButton.y, myButton.width, myButton.height);

LibGDX中包含一个名为Sprite的类跟踪位置和大小,但我不建议使用它,因为它是TextureRegion的子类,因此它往往会导致糟糕的对象图组织。 (TextureRegion是图形资源,但位置和大小参数不是。)