0
我目前正在使用libgdx并创建一个只有shaperenderer的游戏,但在我的脑海中有一个问题。是开始,因为我用的每一个实体开始不只是一个开始为游戏Libgdx ShapeRenderer性能
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到实体end方法降低FPS。而实体内:
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();
}
}
约性能自动任何帮助表示赞赏:)
如果你拿一个看看源代码(https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/glutils/ShapeRenderer.java),你会看到'end'调用了渲染器.end()'这使得''renderer'刷新它对GPU的东西,这是一个相当“重”的操作。因此,只有在绝对必要时才应该调用'flush'或'end'。 – Springrbua