2014-01-02 3 views
13

Ok У меня есть этот кодРисование градиента в 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, поэтому я пытаюсь извлечь уроки из книги, но я не могу найти ответ на этот вопрос. Я слышал о том, как рисовать большой квадрат и иметь вершины разных цветов, но я не уверен, как это сделать.

ответ

24

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

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

С API для ShapeRenderer:

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

+0

Я попробовал и получил черный фон, как будто ничего не рисовал. Что я сделал здесь неправильно? ShapeRenderer shapeRenderer = новый ShapeRenderer(); shapeRenderer.begin (ShapeType.Filled); shapeRenderer.rect (0, 0, Constants.VIEWPORT_WIDTH, Constants.VIEWPORT_HEIGHT, Color.BLUE, Color.BLUE, Color.CYAN, Color.CYAN); shapeRenderer.end(); – JonFavale

+1

Nevermind, оказывается, я использовал ширину и высоту игрового мира вместо камеры. Дурак я. Спасибо вам за помощь! – JonFavale

+0

На сегодняшний день это устарело. –

5

Похоже, что метод 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 
    ); 

Параметры метода Прямоугольник работы точно так же, как те, в filledRect используется, чтобы сделать, как в Кевин Workman ответ.

Смежные вопросы