Java Game Dev - 如何创建垂直健康条?

Java Game Dev - How do I create a vertical health bar?

我需要一些帮助来修复我的垂直健康栏。它正确地跟踪健康状况并进行更新,但由于 Java 的绘制方式(从左上角,即 (0,0)),条形图看起来是颠倒的。我想翻转健康栏以使其正确显示,但我不确定该怎么做。

代码x和y中的划分只是为了将条放在canvas上的正确位置。乘数是放大健康栏以适应我为它制作的图形覆盖。

private void drawHealthBar(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(Color.red);
        g2.fillRect(WIDTH - (WIDTH / 50), HEIGHT / 2, 10, ships.get(0).getHealth() * 6);
        
}

使用 transform() 和 translate() 根据需要设置坐标系。所以:

您希望原点位于 (0, height);左下方。 然后你想翻转Y轴。 示例代码:

AffineTransform tform = AffineTransform.getTranslateInstance( 0, height);
tform.scale( 1, -1);
g2.setTransform( tform);

您需要根据剩余的生命值移动栏,如下所示:

private void drawHealthBar(Graphics g) {
    final Graphics2D g2 = (Graphics2D) g;
    g2.setColor(Color.red);

    final int w = 10;
    final int h = ships.get(0).getHealth() * 6; // calculate height first
    final int x = WIDTH - (WIDTH / 50);
    final int y = HEIGHT / 2 + (MAX_HEIGHT - h); // shift by height of whitespace
    g2.fillRect(x, y, w, h);
}