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

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

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

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


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

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


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

是否因为该Input类中不存在projectionMatrix?我需要为该Input类创建一个视口吗?

还是有指定正确的坐标?

最佳答案

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是图形资产,但position和size参数不是。)

10-04 23:45