【发布时间】:2015-04-26 09:54:03
【问题描述】:
我正在使用ShapeRenderer 对象在我的游戏中创建颜色渐变(Screen 类)。分配的内存用于永久增长,直到我在每次调用后开始处理我的 ShapeRenderer 对象。如何重复使用我的颜色渐变?有没有办法将渐变绘制到纹理中(仅在渲染方法中重复使用一次)?
public void render(float deltaTime) {
camera.update();
batch.setProjectionMatrix(camera.combined);
ShapeRenderer shapeRenderer = new ShapeRenderer();
shapeRenderer.setProjectionMatrix(camera.combined);
shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
shapeRenderer.rect(0, 0, screenWidth, screenHeight, topColor, topColor, bottomColor, bottomColor);
shapeRenderer.end();
shapeRenderer.dispose();
batch.begin();
...
batch.end();
}
【问题讨论】:
-
我不会即时渲染它,而是提供预制图像。但是,如果您出于某种原因想继续这样做,您可以使用
Framebuffer将其渲染为纹理以供重复使用。 -
作为一个小改进,我将 shapeRenderer 设为类变量,因此我不再需要处理它(在
render方法中)。使用Framebuffer听起来不错(尽管我仍然不知道该怎么做)。我更喜欢动态创建渐变,因为我需要许多不同的渐变。这还应该有一个优点,即使在超高 dpi 设备上(与缩放的纹理相比),渐变看起来也更平滑。 -
您如何看待制作 1px 宽度和不同高度的颜色渐变图像,然后将它们缩放到屏幕宽度?会不会过度优化?
-
不,这是一种完全有效的方法。尽管您甚至不需要制作不同的高度。沿着渐变拉伸它们也可以。