Performance Libgdx shaperender性能

Performance Libgdx shaperender性能,performance,libgdx,shape,Performance,Libgdx,Shape,我目前正在使用libgdx,并创建了一个只有shaperender的游戏,但我脑子里有一个问题。Is begin和end方法会降低fps,因为我在每个实体中使用begin,而不是在游戏的其余部分使用一个begin public void render() { sr.setProjectionMatrix(Game.cam.combined); // Render Board board.render(sr); // Render Balls for

我目前正在使用libgdx,并创建了一个只有shaperender的游戏,但我脑子里有一个问题。Is begin和end方法会降低fps,因为我在每个实体中使用begin,而不是在游戏的其余部分使用一个begin

public void render() {

    sr.setProjectionMatrix(Game.cam.combined);

    // Render Board
    board.render(sr);

    // Render Balls
    for (int i = 0; i < balls.size(); i++) {
        balls.get(i).render(sr);
    }

    // Render Players
    player1.render(sr);
    if (player2 != null) {
        player2.render(sr);
    }

    // Render Cannons
    downCannon.render(sr);
    if (upCannon != null) {
        upCannon.render(sr);
    }

    // Render Particles
    for (int i = 0; i < particles.size(); i++) {
        particles.get(i).render(sr);
    }

    // Render BigRainParticles
    for (int i = 0; i < bigRainParticles.size(); i++) {
        bigRainParticles.get(i).render(sr);
    }

    // Render SmallRainParticles
    for (int i = 0; i < smallRainParticles.size(); i++) {
        smallRainParticles.get(i).render(sr);
    }

    // Render Gui
    gui.render(sr);
}

任何有关性能的帮助都非常感谢:

因为您对所有对象都使用相同的ShaperEnder对象,所以请在主渲染方法的开始处调用begin,在主渲染方法的结束处调用end。所以你叫开始和结束一次

您希望提前结束ShaperEnder的唯一原因是,如果您希望使用不同的批处理或渲染器进行绘制,而在您的情况下,看起来您没有这样做

例如:
通常我使用scene2d,并且我有阶段批处理绘制方法。当我想使用ShapeRender进行基本绘图时,我需要先调用batch.end,然后调用ShapeRender.begin->draw stuff->ShapeRender.end,最后再调用batch.begin

如果你查看一下源代码,就会看到该端调用renderer.end,这会使渲染器将其内容刷新到GPU,这是一个相当繁重的操作。因此,您应该只在绝对必要时调用flush或end。
public void render(ShapeRenderer sr) {

    sr.begin(ShapeType.Line);
    sr.setColor(0, 0, 0, 1);
    sr.line(x, y, ballX, ballY);
    sr.end();

    sr.begin(ShapeType.Filled);
    sr.setColor(0, 0, 0, 1);
    sr.circle(ballX, ballY, radius);
    sr.end();

    if (rect) {
        sr.begin(ShapeType.Filled);
        sr.setColor(0, 0, 0, 1);
        sr.rect(rectX - 5, rectY - 5, 10, 10);
        sr.setColor(1, 1, 1, 1);
        sr.rect(rectX - 4, rectY - 4, 8, 8);
        sr.end();
    }
}