如何在 Slick2D 中为字体大小设置动画,而无需在每次渲染时创建新的字体实例?

How to animate font size in Slick2D, without creating a new font instance each render?

我在 Slick2D 工作,它是 LWJGL 的包装器。我正在尝试 animate/scale 字符串的字体大小,而没有在每次渲染时创建新字体和 TrueTypeFont 的性能成本。这是我目前拥有的:

public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
    Font pulsingFont = new Font("Verdana", Font.PLAIN, (int) Math.abs(Math.sin(frameCount) * 20) + 10);
    TrueTypeFont pulsing = new TrueTypeFont(pulsingFont, true);
    pulsing.drawString(200, 200, "Pulsing Text", Color.black);
}

public void update(GameContainer gc, StateBasedGame sbg, int DELTA) throws SlickException {
    frameCount += 0.1;
}

我知道更改字体大小的唯一方法是在字体中,这意味着我还需要创建一个新的 TrueTypeFont 实例每一帧。仅仅这些行就造成了巨大的滞后。

那么有没有一种方法可以动画字体大小而不用每帧创建一个新实例?

是的,您可以缩放图形组件。 不过,这会缩放所有内容,因此请确保在渲染文本后重新缩放它。

请注意,由于图形比例 increment/decrement,您必须调整 x/y 位置。

来自 Slick2d 文档: http://slick.ninjacave.com/javadoc/org/newdawn/slick/Graphics.html :

    scale(float sx, float sy) 
    Apply a scaling factor to everything drawn on the graphics context

这意味着您可以放大或缩小图形组件。 呈现您的文本。 将图形组件重新缩放回正常状态。 完成其余的渲染。