基本上,我的代码是这样的:
我有一个名为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类创建一个视口?
或者无论如何要分配正确的坐标?
答案 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是图形资源,但位置和大小参数不是。)