Подтвердить что ты не робот

Рисование градиента в Libgdx

Хорошо, у меня есть этот код

@Override
public void render() {
    // do not update game world when paused
    if (!paused) {
        // Update game world by the time that has passed
        // since last render frame
        worldController.update(Gdx.graphics.getDeltaTime());
    }
    // Sets the clear screen color to: Cornflower Blue
    Gdx.gl.glClearColor(0x64/255.0f, 0x95/255.0f, 0xed/255.0f,
            0xff/255.0f);
    // Clears the screen
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    // Render game world to screen
    worldRenderer.render();
}

И он рисует светло-голубой фон на экране. Я пытаюсь создать градиент, который идет от синего цвета вверху, до голубого донизу. Есть ли простой способ сделать это? Я новичок в Libgdx и OpenGL, поэтому я пытаюсь извлечь уроки из книги, но я не могу найти ответ на этот вопрос. Я слышал о том, как рисовать большой квадрат и иметь вершины разных цветов, но я не уверен, как это сделать.

4b9b3361

Ответ 1

В libGDX объект ShapeRenderer содержит метод drawRect(), который принимает аргументы для его положения и размера, а также четырех цветов. Эти цвета преобразуются в градиент с 4 углами. Если вы хотите вертикальный градиент, просто сделайте верхние углы одним цветом, а нижние углы - другим. Что-то вроде этого:

shapeRenderer.filledRect(x, y, width, height, lightBlue, lightBlue, darkBlue, darkBlue);

Из API для ShapeRenderer:

4 цветовых параметра определяют цвет нижнего левого, нижнего правого, верхнего правого и верхнего левого угла прямоугольника, что позволяет создавать градиенты.

Ответ 2

Кажется, что метод ShapeRenderer.filledRect был удален в поздних версиях libGDX. Теперь способ сделать это выглядит следующим образом:

    shapeRenderer.set(ShapeRenderer.ShapeType.Filled);
    shapeRenderer.rect(
            x,
            y,
            width,
            height,
            Color.DARK_GRAY,
            Color.DARK_GRAY,
            Color.LIGHT_GRAY,
            Color.LIGHT_GRAY
    );

Параметры для прямого метода работают так же, как и в методе fillRect, как в ответе Кевина Работника.