Java LibGDX:在render方法中创建和处置ShaperEnder?

Java LibGDX:在render方法中创建和处置ShaperEnder?,java,libgdx,Java,Libgdx,我正在使用shaperender对象在游戏中创建颜色渐变(Screenclass)。在每次调用后我开始处理shaperender对象之前,分配的内存一直在增长。如何重复使用颜色渐变?是否有方法将渐变绘制到纹理中(仅一次用于在渲染方法中重用) 虽然看起来你已经解决了你的问题,但这里给你和任何一个遇到类似问题的人一个小提示 在循环的每次运行期间,无论如何都不要实例化新对象(任何类型)。你经历减速的原因正是因为这个。每次实例化一个新对象并停止使用它时,JVM的垃圾收集器都需要清除该对象。您应该始终尝试

我正在使用
shaperender
对象在游戏中创建颜色渐变(
Screen
class)。在每次调用后我开始处理
shaperender
对象之前,分配的内存一直在增长。如何重复使用颜色渐变?是否有方法将渐变绘制到纹理中(仅一次用于在渲染方法中重用)


虽然看起来你已经解决了你的问题,但这里给你和任何一个遇到类似问题的人一个小提示

在循环的每次运行期间,无论如何都不要实例化新对象(任何类型)。你经历减速的原因正是因为这个。每次实例化一个新对象并停止使用它时,JVM的垃圾收集器都需要清除该对象。您应该始终尝试重用对象。这就是为什么总体上(这些链接专门针对LibGdx)如此重要的原因


您为ShaperEnder创建一个字段的想法很好,只是不要忘记在游戏的
dispose()
方法中使用
dispose()
它。

尽管您似乎已经解决了问题,但这里给您和任何遇到类似问题的人一点提示

在循环的每次运行期间,无论如何都不要实例化新对象(任何类型)。你经历减速的原因正是因为这个。每次实例化一个新对象并停止使用它时,JVM的垃圾收集器都需要清除该对象。您应该始终尝试重用对象。这就是为什么总体上(这些链接专门针对LibGdx)如此重要的原因


您为ShaperEnder创建一个字段的想法很好,只是不要忘记在游戏的
dispose()
方法中使用
dispose()
它。

尽管您似乎已经解决了问题,但这里给您和任何遇到类似问题的人一点提示

在循环的每次运行期间,无论如何都不要实例化新对象(任何类型)。你经历减速的原因正是因为这个。每次实例化一个新对象并停止使用它时,JVM的垃圾收集器都需要清除该对象。您应该始终尝试重用对象。这就是为什么总体上(这些链接专门针对LibGdx)如此重要的原因


您为ShaperEnder创建一个字段的想法很好,只是不要忘记在游戏的
dispose()
方法中使用
dispose()
它。

尽管您似乎已经解决了问题,但这里给您和任何遇到类似问题的人一点提示

在循环的每次运行期间,无论如何都不要实例化新对象(任何类型)。你经历减速的原因正是因为这个。每次实例化一个新对象并停止使用它时,JVM的垃圾收集器都需要清除该对象。您应该始终尝试重用对象。这就是为什么总体上(这些链接专门针对LibGdx)如此重要的原因


你为ShaperEnder创建一个字段的想法很好,只是别忘了在游戏的
dispose()
方法中使用
dispose()
它。

我不会即时渲染,而是提供预制作的图像。但是,如果出于某种原因希望继续这样做,可以使用渲染器将其渲染到纹理以供重用。作为一个小小的改进,我已将ShaperEnder作为一个类变量,因此不再需要处理它(在
render
方法中)。使用
Framebuffer
听起来不错(尽管我仍然不知道怎么做)。我更喜欢动态创建渐变,因为我需要很多不同的渐变。这也应该有一个优势,就是即使在超高dpi设备上,渐变看起来也更平滑(与缩放纹理相比)。您如何看待制作1px宽度和不同高度的彩色渐变图像,然后将其缩放到屏幕宽度?这会是过度优化吗?不,这是一个非常有效的方法。虽然你甚至不需要做出不同的高度。沿梯度拉伸也很有效。我不会即时渲染,而是提供预先制作的图像。但是,如果出于某种原因希望继续这样做,可以使用渲染器将其渲染到纹理以供重用。作为一个小小的改进,我已将ShaperEnder作为一个类变量,因此不再需要处理它(在
render
方法中)。使用
Framebuffer
听起来不错(尽管我仍然不知道怎么做)。我更喜欢动态创建渐变,因为我需要很多不同的渐变。这也应该有一个优势,就是即使在超高dpi设备上,渐变看起来也更平滑(与缩放纹理相比)。您如何看待制作1px宽度和不同高度的彩色渐变图像,然后将其缩放到屏幕宽度?这会是过度优化吗?不,这是一个非常有效的方法。虽然你甚至不需要做出不同的高度。沿梯度拉伸也很有效。我不会即时渲染,而是提供预先制作的图像。但是,如果出于某种原因希望继续这样做,可以使用渲染器将其渲染到纹理以供重用。作为一个小小的改进,我已将ShaperEnder作为一个类变量,因此不再需要处理它(在
render
方法中)。使用
Framebuffer
听起来不错(尽管我仍然不知道怎么做)。我更喜欢动态创建渐变,因为我需要很多不同的渐变。这也应该有一个优势,即即使在超高dpi设备上,渐变看起来也更平滑(与缩放纹理相比)。您如何看待制作1px宽度和不同高度的彩色渐变图像,然后将其缩放到屏幕w
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();
}