java - 有没有办法用 java.swing 实现浮动损坏数字?
问题描述
我正在使用 Java Swing 创建一个游戏,并且我发现此时需要图形显示正在发生的事情。当前显示使用 JButton 网格来表示战场上的图块。是否可以使用定制的像素艺术 GIF 在 JButton 上显示浮动/消失的损坏数字?如果是这样,我将如何实施?
解决方案
几乎所有的 Swing 组件都可以扩展来改变它的表现形式。
创建一个自己的按钮类扩展JButton
并覆盖其paintComponent
方法以显示所需的损坏。此方法接收一个Graphic
(实际上是 的实例Graphics2D
),您可以在其上造成伤害,如果一个是活动的。
非常简单的例子:
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
的剪切区域设置为按钮的尺寸。
推荐阅读
- ios - 如何将新的 UICollectionViewController 推送到单元格单元格内的 navigationController
- node.js - 有没有办法检查是否刚刚使用 Okta 身份验证 API 创建了新帐户?
- c++ - SDL_GAMECONTROLLERCONFIG 与 SDL_GameControllerAddMappingsFromFile
- java - 仅使用本地锁从 BST 中进行多线程删除
- javascript - 为什么 web worker 版本运行时间更长?
- excel - 刷新数据链接到 MS Access 查询时,需要允许 Excel 中的列顺序(字母顺序)更改
- html - 使用类或id都不会影响这个div的特性
- gerrit - 如何在 Gerrit 中为给定的补丁集添加描述?
- go - 不安全的从字节切片到结构的类型转换
- vim - Vim 持续冻结有几个原因