java正交摄像头和sprite显示问题
我的代码基于找到的教程here
我试图让我的精灵(32x32像素的pikachu)在地图上移动,当我按下相应的键,努力理解libgdx的正交相机和地图渲染器时。这个运动很好,但是,我的问题是,我的精灵似乎是一个不同的大小比我预期的。我的tmx贴图是一个9x30的平铺贴图,每个平铺为32x32像素。我把我的精灵放进去,注意到精灵的宽度似乎只有地图瓷砖的一半。我注意到,通过改变正交相机内的高度和宽度,我的精灵的大小似乎也会波动。由于精灵应该与地图上的每个瓷砖大小相同(每个32x32像素),我不确定为什么会出现这种显示方式。我怀疑我对正交相机及其与精灵交互方式的理解是错误的,但我希望有人能纠正我的理解,并告诉我为什么在这种情况下,我的32x32精灵显示为与其他地图瓷砖不同的大小
public class TestMap extends ApplicationAdapter implements InputProcessor{
TiledMap tiledMap;
OrthographicCamera camera;
TiledMapRenderer tiledMapRenderer;
SpriteBatch sb;
Texture texture;
Sprite sprite;
@Override
public void create () {
camera = new OrthographicCamera();
camera.setToOrtho(false,320,320);
camera.update();
tiledMap = new TmxMapLoader().load("testmap.tmx");
tiledMapRenderer = new OrthogonalTiledMapRenderer(tiledMap);
Gdx.input.setInputProcessor(this);
sb = new SpriteBatch();
texture = new Texture(Gdx.files.internal("pikachu.png"));
sprite = new Sprite(texture);
}
@Override
public void render () {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
camera.update();
tiledMapRenderer.setView(camera);
tiledMapRenderer.render();
sb.begin();
sprite.draw(sb);
sb.end();
}
@Override
public boolean keyDown(int keycode) {
return false;
}
@Override
public boolean keyUp(int keycode) {
if(keycode == Input.Keys.LEFT)
camera.translate(0,32);
if(keycode == Input.Keys.RIGHT)
camera.translate(0,-32);
if(keycode == Input.Keys.UP)
camera.translate(32,0);
if(keycode == Input.Keys.DOWN)
camera.translate(-32,0);
if(keycode == Input.Keys.NUM_1)
tiledMap.getLayers().get(0).setVisible(!tiledMap.getLayers().get(0).isVisible());
if(keycode == Input.Keys.NUM_2)
tiledMap.getLayers().get(1).setVisible(!tiledMap.getLayers().get(1).isVisible());
return false;
}
@Override
public boolean keyTyped(char character) {
return false;
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
return false;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
return false;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
return false;
}
@Override
public boolean mouseMoved(int screenX, int screenY) {
return false;
}
@Override
public boolean scrolled(int amount) {
return false;
}
}
草地瓷砖及其倒置形式均为32x32,红色空间表示地图边界的外部。请让我知道,如果有任何更多的信息需要回答这个问题!谢谢!
共 (0) 个答案