JAVA:尝试读取 SpriteSheet 时出现未成形的 Sprite

标签 java javax.imageio sprite-sheet

所以我是一个尝试 ImageIO 的初学者。有人能告诉我为什么我会得到这个像素化不完整的 Sprite 吗? 这是代码

public BufferedImage getImage(String location)
{
    try 
    {
        File file = new File(location);

        image = ImageIO.read(file);
    } 
    catch (IOException e) 
    {
        System.err.println("It don't work!!");
        e.printStackTrace();
    }
    return image;
}

我使用这种方法来显示它

public void paint(Graphics g)
{
    g.drawImage(getImage("Numbers/icon0.png"), 0, 0, 32, 32, null);
    repaint();
}

这就是它给我的东西

And here's what it gives me

最佳答案

如果你想显示 Sprite 的第一个(单个)单元格,你可能想写:

g.drawImage(getImage("Numbers/icon0.png").getSubimage(0, 0, 32, 32), 0, 0, null);

注意 getSubimage(x, y, w, h) 部分,以获取单个单元格。

如果你想绘制整个 Sprite 表,你可以使用:

g.drawImage(getImage("Numbers/icon0.png"), 0, 0, null);

您的原始代码将绘制整个 Sprite 表,并重新调整为 32x32。

<小时/>

PS:您可能不应该从 paint 方法调用 repaint(),因为这会创建无限的重绘循环。如果您希望重新绘制组件,请使用某种计时器以固定的时间间隔重新绘制组件。

PPS:您可能不应该在绘制方法中执行 I/O(即读取图像),因为任何 I/O 操作都可能需要时间并使您的 UI 缓慢且无响应。这也是不必要的,因为每次重新绘制时 Sprite 表都不会改变。相反,请预先读取图像,然后仅在 paint 方法中绘制它。

关于JAVA:尝试读取 SpriteSheet 时出现未成形的 Sprite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31764132/

相关文章:

java - 使用 ImageIO 输入 null 异常读取 PNG

image - Corona - 如何使 Sprite 表与动态图像分辨率兼容

java - 本地方法调用与对象方法调用

java方法中的javascript变量生命周期

java - 开发模式的Spring Security预认证

java - 在 Java 中显示图像

java - 压缩JPG使图像变绿

javascript - 如何在 Javascript 中缩放 Sprite

ios - 什么是 "offset"和 "sourceColorRect"键 texturepacker pList 架构?

java - 如何配置 Google App Engine 上的应用程序以接收任何电子邮件地址的电子邮件?