Java/Libgdx-如何在没有闪烁效果的情况下绘制多个圆?
也许我的头衔不太合适,但我会尽量解释清楚 事实上,我目前正在使用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();
@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方法中从数组中读取它们。谢谢,这非常有帮助