有没有办法用 java.swing 实现浮动伤害数字?

Is there a way to implement floating damage numbers with java.swing?

我正在使用 Java Swing 创建一个游戏,我发现需要图形显示此时正在发生的事情。当前显示使用 JButton 网格来表示战场上的方块。是否可以使用定制的像素艺术 GIF 在 JButton 上显示 floating/disappearing 伤害数字?如果是这样,我将如何实施?

几乎所有的 Swing 组件都可以扩展以改变它的表现形式。

创建一个自己的按钮 class 扩展 JButton 并覆盖其 paintComponent 方法以显示所需的损坏。此方法接收一个 Graphic(实际上是 Graphics2D 的一个实例),如果一个 active.

,您可以在其上绘制伤害

非常简单的例子:

public class DamageButton extends JButton {

    private String damage = null;

    public DamageButton(String text) {
        super(text);
    }

    public void setDamage(String damage) {
        this.damage = damage;
        System.out.println(damage);
        repaint();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (damage != null) {
            Graphics2D gg = (Graphics2D) g.create();
            try {
                gg.setColor(Color.RED);
                gg.drawString(damage, 10, 10);
            } finally {
                gg.dispose();
            }
        }
    }
}

正在创建一个新的 Graphics (gg),因此 g 的设置不会更改,也不需要恢复。

使用一些文本调用 setDamage() 以使其显示在按钮上或使用 null 以取消效果。

可以(或多或少)轻松添加动画或其他效果。请注意,给定的 Graphics2D 的剪裁区域设置为按钮的尺寸。