Libgdx: нарисуйте спрайт при приземлении - PullRequest
0 голосов
/ 07 апреля 2020

Я хочу нарисовать спрайт при возникновении события touchDown и удалить его при возникновении касания. Я попробовал следующий код:

public class Connect4Screen implements Screen {
    SpriteBatch batch;
    Connect4Screen(){
    batch = new SpriteBatch();
    camera = new OrthographicCamera(30, 20);
    camera.update();
    batch.setProjectionMatrix(camera.combined);
    Gdx.input.setInputProcessor(new InputAdapter(){

        @Override
        public boolean touchDown(int screenX, int screenY, int pointer, int button) {
            drawChip();
        }
    }
    }
    public void drawChip(){
        batch.begin();
        batch.draw(new Texture("Images/yellow.png"), 0,  5, 1.4f,1.4f);
        batch.end();
    }
}

Я удалил ненужный код. Что здесь не так?

1 Ответ

0 голосов
/ 07 апреля 2020

Если вы просто рисуете что-то как одноразовое событие, оно будет видно только в течение 1/60 секунды. Игры перерисовывают экран снова и снова в al oop, поэтому, чтобы что-то появлялось и оставалось на экране, вам нужно установить логический элемент, который указывает, что он должен быть нарисован, а затем в вашем методе рендеринга вы рисуете этот элемент, если логическое значение истинно.

Это очень упрощенное объяснение. В играх, как правило, есть много разных предметов для рисования и go, и хранить отдельные логические значения для каждого из них нецелесообразно. Поэтому обычно у вас есть список предметов для рисования, и вы можете добавлять и удалять предметы из списка на основе событий в игре. В вашем методе рендеринга вы должны l oop просмотреть список и нарисовать в нем все.

Кроме того, вы не должны создавать new Texture без сохранения ссылки на него, чтобы вы могли dispose() его потом. Текстуры используют встроенную память графического процессора и должны быть утилизированы, иначе они могут вызвать утечку памяти. В LibGDX любой объект, который может вытекать из памяти, реализует Disposable и должен быть удален до потери ссылки.

...