Libgdx ShapeRenderer性能

时间:2015-04-17 10:19:14

标签: performance libgdx shape

我目前正在使用libgdx并且只使用shaperenderer创建一个游戏,但我脑子里有一个问题。开始和结束方法是否会丢弃fps,因为我在每个实体中都使用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);
}

正如你所看到的,我正在向实体提供shaperenderer。在实体内部:

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();
    }
}

任何有关表演的帮助都表示赞赏:)

1 个答案:

答案 0 :(得分:0)

由于您为所有对象使用相同的ShapeRenderer对象,因此从主渲染方法的开头开始,并在结束时结束。所以你打电话给开始和结束一次。

您之前想要结束ShapeRenderer的唯一原因是,如果您想使用不同的批处理或渲染器进行绘制,在您的情况下,它看起来并不是您想要的。

例如: 通常我使用scene2d,我在draw方法中有阶段批处理。当我想使用ShapeRender进行原始绘图时,我需要调用batch.end()然后调用shapeRenderer()。begin - &gt;画东西 - &gt; shapeRenderer.end(),最后是batch.begin()