有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java正交摄像头和sprite显示问题

enter image description here我的代码基于找到的教程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) 个答案