2016-09-19 3 views
1

Как создать простую прямоугольную кнопку прямоугольника в libgdx без использования изображений? Кнопка должна иметь тень и должна обрабатывать нажатое состояние. Я хочу, чтобы это было программным, чтобы было легче изменить цвет, стиль позже и т. Д.Как создать простую кнопку закругленного прямоугольника в libgdx?

+0

Можете ли вы указать, что вы подразумеваете под изображениями? Все, что вы видите на экране, - это «образ». Что конкретно вы пытаетесь избежать и почему? – Tenfour04

ответ

1

Мое понимание вашего вопроса состояло в том, как создать округленный прямоугольник внутри программы без предварительного создания любых изображений вне кода ,

Я был в подобной ситуации некоторое время назад, и я закончил писать функцию, ниже которой генерируется округленный прямоугольник Pixmap на основе параметров (все единицы находятся в пикселях). Он также работает с разными значениями альфа, чтобы обеспечить непрозрачность (именно поэтому используются два объекта Pixmap).

Получившийся Pixmap может быть легко передан конструктору Texture, если вы обнаружите, что его проще визуализировать.

public static Pixmap createRoundedRectangle(int width, int height, int cornerRadius, Color color) { 

     Pixmap pixmap = new Pixmap(width, height, Pixmap.Format.RGBA8888); 
     Pixmap ret = new Pixmap(width, height, Pixmap.Format.RGBA8888); 

     pixmap.setColor(color); 

     pixmap.fillCircle(cornerRadius, cornerRadius, cornerRadius); 
     pixmap.fillCircle(width - cornerRadius - 1, cornerRadius, cornerRadius); 
     pixmap.fillCircle(cornerRadius, height - cornerRadius - 1, cornerRadius); 
     pixmap.fillCircle(width - cornerRadius - 1, height - cornerRadius - 1, cornerRadius); 

     pixmap.fillRectangle(cornerRadius, 0, width - cornerRadius * 2, height); 
     pixmap.fillRectangle(0, cornerRadius, width, height - cornerRadius * 2); 

     ret.setColor(color); 
     for (int x = 0; x < width; x++) { 
      for (int y = 0; y < height; y++) { 
       if (pixmap.getPixel(x, y) != 0) ret.drawPixel(x, y); 
      } 
     } 
     pixmap.dispose(); 

     return ret; 
    } 

Используя эту функцию, она не должна быть слишком сложной, чтобы сделать свой собственный объект-оболочку (например, RoundedRectangle), который будет перерисовать изображение каждый раз, когда один из параметров был изменен, и нужно быть оказаны.

+0

Спасибо, но я думаю, что этот метод не очень эффективен ... – user1615898

+0

Операции O (ширина * высота), которые довольно быстры (но не в вашем цикле), но вам не нужно повторно отображать изображение в каждом кадре , а не только при изменении любого значения. –

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