LibGDX-等距图块和子画面放置

时间:2018-07-13 01:41:26

标签: java libgdx coordinate-systems coordinate-transformation isometric

我正在尝试在LibGDX中的等轴测图贴图上渲染测试精灵。我的图块是64px x 32px。我正在尝试在图块的中心渲染一个精灵。

尽管遵循此处找到的等距数学教程:Isometric Math,但我似乎找不到正确设置的测试精灵的位置。

例如,我希望将灰色框放在图块0,0上,但我得到的是这个结果:

The sprite is not in the correct position

以下是我用来计算正确的精灵位置(对应于给定的图块)的函数

public int tileToScreenX(int x, int y) {
    return (x -  y) * 32;
}

public int tileToScreenY(int x, int y) {
    return (x + y) * 16;
}

这是其他一些相关代码:

@Override
public void create () {
    // Load map from Tiled and create isometric renderer
    map = new TmxMapLoader().load("Test_Map.tmx");
    renderer =  new IsometricTiledMapRenderer(map);
    camera = new OrthographicCamera(800, 600);
    //   Set camera view so that tilemap is centered on the screen
    TiledMapTileLayer layer0 = (TiledMapTileLayer) map.getLayers().get(0);
    Vector3 center = new Vector3(layer0.getWidth() * layer0.getTileWidth() / 2f, 0, 0);
    camera.position.set(center);
    camera.update();
    renderer.setView(camera);
    // Load character spritesheet, split poses into separate textures
    character = new Texture(Gdx.files.internal("Sprites/Characters/cube_sprite.png"));
    TextureRegion[][] splitPoses = TextureRegion.split(character, character.getWidth() / 4, character.getHeight());
    characterPoses =  new TextureRegion[4];
    for(int i = 0; i < 4; i++) {
        characterPoses[i] = splitPoses[0][i];
    }
    batch = new SpriteBatch();
}

@Override
public void render () {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    renderer.render();
    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    batch.draw(characterPoses[0],tileToScreenX(0, 0),tileToScreenY(0,0), 64, 32);
    batch.end();
}

我尝试在batch.draw(characterPoses[0],tileToScreenX(0, 0),tileToScreenY(0,0), 64, 32);行的图块0,0上绘制精灵。我不确定自己在做什么错,任何帮助都将不胜感激。

0 个答案:

没有答案