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

如何在libgdx中创建一个简单的圆角矩形按钮?,libgdx,Libgdx,如何在不使用图像的情况下在libgdx中创建一个简单的圆角矩形按钮?按钮应具有阴影,并应处理按下状态。我希望它是编程的,以便于以后更改颜色、样式等。我对您的问题的理解是,如何在程序中创建一个圆角矩形,而不必预先生成代码外的任何图像 前一段时间我也遇到过类似的情况,我结束了编写下面的函数,该函数根据参数生成一个Pixmap圆角矩形(所有单位均以像素为单位)。它还可以使用不同的alpha值以允许不透明度(这就是为什么使用了两个Pixmap对象) 如果您发现更易于渲染,则生成的Pixmap可以轻松地传

如何在不使用图像的情况下在libgdx中创建一个简单的圆角矩形按钮?按钮应具有阴影,并应处理按下状态。我希望它是编程的,以便于以后更改颜色、样式等。

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

前一段时间我也遇到过类似的情况,我结束了编写下面的函数,该函数根据参数生成一个
Pixmap
圆角矩形(所有单位均以像素为单位)。它还可以使用不同的alpha值以允许不透明度(这就是为什么使用了两个
Pixmap
对象)

如果您发现更易于渲染,则生成的
Pixmap
可以轻松地传递给
纹理的构造函数

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;
    }
public static Pixmap createRoundedRectangle(int-width、int-height、int-cornerRadius、Color){
Pixmap Pixmap=新的Pixmap(宽度、高度、Pixmap.Format.rgba888);
Pixmap ret=新的Pixmap(宽度、高度、Pixmap.Format.rgba888);
pixmap.setColor(颜色);
pixmap.fillCircle(拐角半径、拐角半径、拐角半径);
pixmap.fillCircle(宽度-拐角半径-1,拐角半径,拐角半径);
pixmap.fillCircle(拐角半径,高度-拐角半径-1,拐角半径);
pixmap.fillCircle(宽度-拐角半径-1,高度-拐角半径-1,拐角半径);
pixmap.fillRectangle(拐角半径,0,宽度-拐角半径*2,高度);
pixmap.fillRectangle(0,拐角半径,宽度,高度-拐角半径*2);
ret.setColor(颜色);
对于(int x=0;x

使用此函数,创建您自己的包装器对象(例如,
RoundedRectangle
)应该不会太困难,它会在每次更改其中一个参数并需要渲染时重新绘制图像。

能否具体说明图像的含义?你在屏幕上看到的一切都是“图像”。你特别想避免什么,为什么?@Tenfour04如果你是个程序员,你会知道的。图像指的是在photoshop中设计的JPG、PNG等文件。以编程方式制作按钮或其他方式意味着您只需创建形状、文本、边框、阴影等来创建按钮。这样,您就可以轻松地用代码“以编程方式”对其进行更改,而不必返回photoshop重做所有内容并重新导出。@Hasan Image并不是专门指图像文件。Libgdx有一个名为Image的类。我也见过有人问关于图像的问题,但他们实际上是指纹理或Pixmap类,它们分别是加载到本机或GPU内存中的图像。我试图确定这是否是XY问题。有必要在四年后再来侮辱我吗?它执行O(宽度*高度)操作,速度相当快(但不在循环中),但您不需要在每帧重新渲染图像,而只需要在更改任何值时进行。