Java/Libgdx-如何在没有闪烁效果的情况下绘制多个圆?

Java/Libgdx-如何在没有闪烁效果的情况下绘制多个圆?,java,libgdx,2d,Java,Libgdx,2d,也许我的头衔不太合适,但我会尽量解释清楚 事实上,我目前正在使用Libgdx进行一个小项目。目前,这个项目的目标是能够在我的屏幕上随机显示几个圆圈 我在屏幕上正确显示了这些圆圈,但它们正在闪烁 @Override public void render(float delta) { renderer.begin(ShapeType.Filled); if(!mapIsCreated) { Random rand = new Random();

也许我的头衔不太合适,但我会尽量解释清楚

事实上,我目前正在使用Libgdx进行一个小项目。目前,这个项目的目标是能够在我的屏幕上随机显示几个圆圈

我在屏幕上正确显示了这些圆圈,但它们正在闪烁

@Override
public void render(float delta) {

    renderer.begin(ShapeType.Filled);
    if(!mapIsCreated)
    {
        Random rand = new Random();
        int x, y;
        for(int i=0;i<200;i++)
        {
            x = rand.nextInt(Gdx.graphics.getWidth());
            y = rand.nextInt(Gdx.graphics.getHeight());

            renderer.setColor(Color.DARK_GRAY);
            renderer.circle(x, y, 5);
            renderer.setColor(Color.GRAY);
            renderer.circle(x, y, 3);
        }
        mapIsCreated = true;
    }
    renderer.end();
}
@覆盖
公共无效渲染(浮动增量){
renderer.begin(ShapeType.Filled);
如果(!mapIsCreated)
{
Random rand=新的Random();
int x,y;

对于(inti=0;i而言,您似乎从未清除过屏幕

应在渲染方法的开头调用以下行:

// This is black, you can choose any color, technically one call is enough
Gdx.gl.glClearColor(0f, 0f, 0f, 1f);
// This line clears the screen (more precisely the color buffer, there are others but this one should be fine)
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
现在,由于看起来您只想随机生成一次,所以在初始化方法(如create方法)中创建一次并将其保存在数组/集合中:

// Global field
Array<Vector2> circlePositions = new Array<>();

// initialization method
renderer = new ShapeRenderer();

Random rand = new RandomXS128();
for (int i = 0; i < 200; i++)
{
    circlePositions.add(
            new Vector2(
                    rand.nextInt(Gdx.graphics.getWidth()),
                    rand.nextInt(Gdx.graphics.getHeight())));
    circlePositions.add(
            new Vector2(
                    rand.nextInt(Gdx.graphics.getWidth()),
                    rand.nextInt(Gdx.graphics.getHeight())));
}
//全局字段
Array circlePositions=新数组();
//初始化方法
渲染器=新的ShaperEnder();
Random rand=新的RandomXS128();
对于(int i=0;i<200;i++)
{
circlePositions.add(
新矢量2(
rand.nextInt(Gdx.graphics.getWidth()),
rand.nextInt(Gdx.graphics.getHeight());
circlePositions.add(
新矢量2(
rand.nextInt(Gdx.graphics.getWidth()),
rand.nextInt(Gdx.graphics.getHeight());
}
然后在渲染方法中,您可以像这样绘制圆:

Gdx.gl.glClearColor(0f, 0f, 0f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

renderer.begin(ShapeType.Filled);
for (int i = 0; i < circlePositions.size; i++)
{
    Vector2 pos = circlePositions.get(i);

    if (i % 2 == 0)
    {
        renderer.setColor(Color.DARK_GRAY);
        renderer.circle(pos.x, pos.y, 5);
    } else
    {
        renderer.setColor(Color.GRAY);
        renderer.circle(pos.x, pos.y, 3);
    }
}
renderer.end();
Gdx.gl.glClearColor(0f,0f,0f,1);
Gdx.gl.glClear(GL20.gl\u颜色\u缓冲\u位);
renderer.begin(ShapeType.Filled);
对于(int i=0;i

如果您不想以60 fps的速度重新绘制所有内容,请查看非连续渲染。

在Create()方法中创建它们一次,并将它们存储在数组中。在render方法中从数组中读取它们。谢谢,这非常有帮助