【发布时间】:2016-07-30 21:17:26
【问题描述】:
我正在使用 libgdx 编写一个 2d 平台游戏,我正在尝试制作一个菜单屏幕,玩家可以在其中单击按钮并加载该级别。我使用 gdx.input 作为点击坐标,使用 TextureRegion.getRegionX() 作为按钮坐标。他们不同步,我读到 camera.unproject 应该解决这个问题。我适当地使用了它,但坐标仍然不匹配。 camera.unproject 似乎将 x 和 y 的 0,0 设置为屏幕的中心,而 batch.draw (这是将 TextureRegion 绘制到屏幕的方法)似乎使用左下角作为 x 和 y 的 0 , 0.
这是代码,我忽略了我认为不相关的内容:
public class LevelScreen implements Screen {
private TextureRegion level_bg;
private SpriteBatch batch;
private Camera camera;
private TextureAtlas textureAtlas;
private TextureRegion lockselectbg[]=new TextureRegion[10];
public LevelScreen(){
}
@Override
public void show() {
batch=new SpriteBatch();
camera = new OrthographicCamera(500,700);
LevelStatus.put();
LevelStatus.get();
textureAtlas=new TextureAtlas(Gdx.files.internal("levelatlas.pack"));
Array<AtlasRegion> atlasArrays = new Array<AtlasRegion>(textureAtlas.getRegions());
level_bg = atlasArrays.get(0);
lockselectbg[0] = atlasArrays.get(21);
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(159/255.0f,220/255.0f,235/255.0f,0xff/255.0f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.setProjectionMatrix(camera.combined);
batch.begin();
batch.draw(level_bg, -500/2,-348/2);
batch.draw(lockselectbg[0], -180,0);
batch.end();
if(Gdx.input.isTouched()){
Vector3 tmp = new Vector3(Gdx.input.getX(),Gdx.input.getY(), 0);
camera.unproject(tmp);
Rectangle textureBounds = new Rectangle(lockselectbg[0].getRegionX(), lockselectbg[0].getRegionY(), lockselectbg[0].getRegionWidth(), lockselectbg[0].getRegionHeight());
if(textureBounds.contains(tmp.x, tmp.y)) {
System.out.println("It worked");
}
}
}
@Override
public void dispose() {
textureAtlas.dispose();
batch.dispose();
}
【问题讨论】: