Libgdx ShapeRenderer 性能
Libgdx ShapeRenderer Performance
我目前正在使用 libgdx 并且只使用 shaperenderer 创建游戏,但我脑子里有一个问题。 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);
}
如您所见,我正在将 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();
}
}
感谢任何有关性能的帮助:)
由于您对所有对象使用相同的 ShapeRenderer 对象,因此调用从主渲染方法的开头开始并在其结尾结束。所以你调用一次开始和结束。
您想要提前结束 ShapeRenderer 的唯一原因是,如果您想使用不同的批次或渲染器进行绘制,在您的情况下看起来您不需要。
例如:
通常我使用 scene2d 并且我在绘制方法中有阶段批处理。当我想使用 ShapeRender 进行原始绘图时,我需要调用 batch.end() 然后调用 shapeRenderer().begin -> draw stuff -> shapeRenderer.end() 最后调用 batch.begin()
我目前正在使用 libgdx 并且只使用 shaperenderer 创建游戏,但我脑子里有一个问题。 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);
}
如您所见,我正在将 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();
}
}
感谢任何有关性能的帮助:)
由于您对所有对象使用相同的 ShapeRenderer 对象,因此调用从主渲染方法的开头开始并在其结尾结束。所以你调用一次开始和结束。
您想要提前结束 ShapeRenderer 的唯一原因是,如果您想使用不同的批次或渲染器进行绘制,在您的情况下看起来您不需要。
例如: 通常我使用 scene2d 并且我在绘制方法中有阶段批处理。当我想使用 ShapeRender 进行原始绘图时,我需要调用 batch.end() 然后调用 shapeRenderer().begin -> draw stuff -> shapeRenderer.end() 最后调用 batch.begin()