Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA:尝试读取精灵表时未格式化的精灵_Java_Javax.imageio_Sprite Sheet - Fatal编程技术网

JAVA:尝试读取精灵表时未格式化的精灵

JAVA:尝试读取精灵表时未格式化的精灵,java,javax.imageio,sprite-sheet,Java,Javax.imageio,Sprite Sheet,所以我是一个用ImageIO做实验的初学者。有人能告诉我为什么我得到这个像素化的不完整的精灵吗? 这是密码 public BufferedImage getImage(String location) { try { File file = new File(location); image = ImageIO.read(file); } catch (IOException e) { System.

所以我是一个用ImageIO做实验的初学者。有人能告诉我为什么我得到这个像素化的不完整的精灵吗? 这是密码

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();
}
这就是它给我的


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

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

PPS:您可能不应该在paint方法内部执行I/O(即读取图像),因为任何I/O操作都可能需要时间,并使UI变得迟钝和无响应。这也是不必要的,因为精灵表不会在每次重新绘制时更改。相反,请先阅读图像,然后仅使用
paint
方法绘制图像