Проблемы с отрисовкой текстуры на TileMap в java

У меня проблемы с рисованием изображения (текстуры) на TiledMap. Когда я пытаюсь вызвать batch.draw(mytexture,x,y), единственное отображаемое изображение — это карта ниже; Я пытался найти в Интернете возможное решение, но я еще не решил проблему.

i

Вот мой код

public class GameTest implements ApplicationListener{
private Player player;

private Batch batch;
private MyTexture texture;
private OrthographicCamera camera;
private OrthogonalTiledMapRenderer renderer;
private TiledMap map;

public GameTest() {

//init camera and player
}
@Override
public void create() {      
    background = new Background();
    batch = new SpriteBatch();
    texture = new MyTexture();

    map = new TmxMapLoader().load(Asset.FIRST_LEVEL);
    renderer = new OrthogonalTiledMapRenderer(map);
    camera.setToOrtho(false, 1280,512);
    renderer.setView(camera);
    camera.update();
}
@Override
public void render() {

    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    background.update(Gdx.graphics.getDeltaTime());
    batch.begin();

    if(Gdx.input.isKeyJustPressed(Input.Keys.RIGHT)){
        game.movePlayer('r', 1);
        camera.position.x += 5;
    }
    camera.update();        
    renderer.setView(camera);
    renderer.render();

//      batch.setProjectionMatrix(camera.combined);
    batch.draw(texture.getTexture("100"), (player.getPosition().y) * 64, ((7 
 - player.getPosition().x) * 64));
    batch.end();
}

}

Вот класс MyTexture. Я создаю карту, где я помещаю строку в качестве ключа и текстуру, соответствующую изображению, которое я хочу отобразить.

public MyTexture() {

    ....
        map.put("100",new Texture(Gdx.files.internal(Asset.PLAYER)));

}   
public static final Texture getTexture(String key){
    return map.get(key);
}

А вот мой класс Asset, где я создаю только статическое поле для пути imgaes public class Asset {

public static Map<String, String> map = new HashMap<String,String>();

public static final String FIRST_LEVEL = "levels/firstLevel.tmx";
public static String BACKGROUND = "asset/Background.png";
public static String PLAYER = "asset/Player.png";
...

}

person Frank    schedule 26.11.2017    source источник


Ответы (1)


Вы хотите рисовать с масштабом единиц измерения 1,0? При вызове конструктора OrthogonalTiledMapRenderer, который принимает только TmxTileMap в качестве параметра, масштаб единиц измерения по умолчанию равен 1,0. Это означает, что один тайл занимает столько мировых единиц, сколько пикселей в тайле.

Попробуйте вызвать его с помощью 1.0f / your_tile_size_in_pixels. Итак, если плитки для вашей карты имеют размер 64 на 64 пикселя, измените

renderer = new OrthogonalTiledMapRenderer(map);

to

renderer = new OrthogonalTiledMapRenderer(map, 1.0f / 64.0f);
person bornander    schedule 26.11.2017
comment
Я только что попытался добавить это, но ничего не работает. Он отображает только мозаичную карту без игрока в позиции (x, y). - person Frank; 26.11.2017