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
相关产品推荐
相关产品推荐

