JAVA:Unformed Sprite尝试读取SpriteSheet时

时间:2015-08-01 17:08:07

标签: java javax.imageio sprite-sheet

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

foreach

我使用这种方法来显示它

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;
}

这就是它给我的东西

And here's what it gives me

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

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

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