Мигающая мозаичная карта Java Libgdx - рендеринг мозаичных карт

У меня есть 3 плитки, и я пытаюсь отобразить их для тайловой карты. Мой код на данный момент: public void

render(float delta) {

Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
game.batch.begin();
int w;
w = 120;

int h;
h = 1080/16;

int tileX = 0;
int tileY = 0;
Texture currentTile = null;
for(int i=0; i<w; i++){
    for(int j=0; j<h; j++){

        switch(MathUtils.random(2)){

        case 0:
            currentTile = grass;
            tiles.add(grass);
            break;
        case 1:
            currentTile = stone;
            break;
        case 2:
            currentTile = dirt;
            break;
            }
        game.batch.draw(currentTile, i*120, j*120);

    }
    }

Проблема в том, что он отображается нормально, за исключением того, что плитки продолжают мигать - так как я думаю, что они постоянно перерисовываются. Но как я могу остановить это единственный способ использовать 2d-массив, если это так, пожалуйста, покажите, как:

Визуализировать массив, в этом формате что бы я поставил вместо currentTile?:

game.batch.draw(currentTile, i*120, j*120);

Настройка массива, как он должен выглядеть, вот так?:

Texture[] tiles = new Texture[1];

Как правильно добавлять фрагменты и строить массив, любая другая деталь будет полезна.


person user3165683    schedule 29.08.2014    source источник


Ответы (2)


По моему опыту, мигающий экран возникает, когда на вашем холсте ничего не нарисовано. Прежде чем вы начнете рисовать плитки, создайте/залейте их каким-либо цветом (черным, синим, любым другим), который заполнит экран. Отсюда нарисуйте свои предметы BG, плитки, игрока / сущности и т. Д.

person Community    schedule 29.08.2014
comment
Он все еще мигает, это не потому, что они постоянно перерисовываются? - person user3165683; 29.08.2014
comment
Обычно при создании игры все отрисовывается каждый раз, когда ваша игра обновляется (30, 60 и т. д.) раз в секунду. Если бы вы не обновляли экран постоянно/перерисовывали изображения, ничего бы не двигалось. Вам могут быть полезны это или другие руководства: gamefromscratch.com/page/LibGDX-Tutorial -series.aspx - person ; 29.08.2014
comment
Кроме того, прежде чем рисовать плитки, вы должны сделать что-то вроде этого: Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); - person ; 29.08.2014
comment
Я только что добавил в Gdx.gl.glClearColor(0, 0, 0, 1); - person user3165683; 29.08.2014

В каждом игровом цикле вы устанавливаете новую случайную текстуру для плитки, это означает, что за 1 секунду плитка может измениться до 60 раз (fps) в секунду.

Чтобы исправить это, зависит, должны ли плитки изменяться или нет.

-если нет, предопределить их в конструкторе

-если они могут измениться, установите синхронизированное событие и/или действие, чтобы вызвать его

person dwana    schedule 29.08.2014
comment
Это полезно, они не предназначены для изменения после первой загрузки, не могли бы вы привести пример их предопределения? - person user3165683; 29.08.2014
comment
Не могли бы вы предоставить еще немного кода? (в основном структуру класса/папки, если она у вас есть). Поэтому я могу сделать пример, подходящий для вашей ситуации. - person dwana; 29.08.2014
comment
Сережа, что тебя интересует? - person user3165683; 29.08.2014
comment
Я хотел бы видеть полный класс, в котором вы рисуете свои заголовки, а не только метод render(). - person dwana; 29.08.2014
comment
Это единственный другой фрагмент кода, который у меня есть для рисования тайлов: Текстура травы = новая Текстура(Gdx.files.internal(grass.png)); Текстура камня = новая текстура (Gdx.files.internal (stone.png)); Текстура грязи = новая текстура (Gdx.files.internal (dirt.png)); - person user3165683; 29.08.2014
comment
это просто переменные, и, как вы понимаете, большая часть кода моего тайла находится в методе рендеринга. - person user3165683; 29.08.2014
comment
Это в Customclass или нет? - person dwana; 29.08.2014
comment
есть в основном классе - person user3165683; 29.08.2014