You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java游戏开发:如何实现正常显示的垂直血条,解决倒置问题

问题根源

Java AWT的fillRect(int x, int y, int width, int height)方法中,y参数代表矩形左上角的y轴坐标,高度为正的时候矩形会向y轴正方向(屏幕下方)延伸,所以你当前的写法是从屏幕垂直中点开始往下画血条,血量越高血条越向下延伸,自然是倒置的。

最简修复方案

调整血条左上角的y坐标计算逻辑,让血条从固定的底部位置向上延伸:你需要先拿到己方飞船的最大生命值,再通过「固定底部y坐标 减去 当前血量对应的高度」得到红色血条的左上角y坐标,代码修改如下:

private void drawHealthBar(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        // 先绘制灰色的血条背景(可选,优化显示效果)
        g2.setColor(Color.GRAY);
        int maxHealth = ships.get(0).getMaxHealth();
        int barMaxHeight = maxHealth * 6;
        int barX = WIDTH - (WIDTH / 50);
        int barYBase = HEIGHT / 2; // 血条最顶端的固定坐标
        // 灰色背景铺满整个血条高度范围
        g2.fillRect(barX, barYBase, 10, barMaxHeight);
        
        // 再绘制当前红色血量
        g2.setColor(Color.RED);
        int currentHealth = ships.get(0).getHealth();
        int currentBarHeight = currentHealth * 6;
        // 红色血条左上角y坐标 = 血条最顶端坐标 + 总高度 - 当前高度,实现从下往上填充
        int currentBarY = barYBase + barMaxHeight - currentBarHeight;
        g2.fillRect(barX, currentBarY, 10, currentBarHeight);
}

如果不需要灰色背景,直接删除背景绘制部分,只保留红色血量绘制的逻辑即可。

效果示例

血条示例

内容的提问来源于stack exchange,提问作者fish4joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:54:03