如何在libgdx中创建一个简单的圆角矩形按钮?

时间:2016-09-19 16:37:21

标签: libgdx

如何在不使用图像的情况下在libgdx中创建一个简单的圆角矩形按钮?按钮应该有一个阴影,应该处理按下状态。我希望它能够以编程方式轻松改变颜色,以后改变风格等。

1 个答案:

答案 0 :(得分:1)

我对你的问题的理解是如何在程序中创建一个圆角矩形,而不必在代码之外预先生成任何图像。

我前段时间处于类似情况,我在下面编写了下面的函数,根据参数生成Pixmap圆角矩形(所有单位都以像素为单位)。它也适用于不同的alpha值以允许不透明度(这就是为什么使用了两个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)并不会太困难,每当其中一个参数被更改并需要渲染时,它就会重新绘制图像。