JAVA:尝试读取 SpriteSheet 时未成形的 Sprite
JAVA: Unformed Sprite When trying to Read SpriteSheet
所以我是一个尝试使用 ImageIO 的初学者。谁能告诉我为什么我得到这个 pixelated-incomplete 精灵图?
这是代码
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)
部分,以获得单个单元格。
如果你想绘制整个精灵sheet,你可以使用:
g.drawImage(getImage("Numbers/icon0.png"), 0, 0, null);
您的原始代码将绘制 整个精灵 sheet,重新调整为 32x32。
PS:您可能不应该从 paint
方法中调用 repaint()
,因为那样会产生无限重绘循环。如果您希望您的组件重新绘制,请使用某种计时器以固定的时间间隔重新绘制您的组件。
PPS:您可能不应该在 paint 方法中执行 I/O(即读取图像),因为任何 I/O 操作都可能需要时间并使您的 UI 呆滞且反应迟钝。这也是不必要的,因为每次重绘时精灵 sheet 都不会改变。取而代之的是,先读取图像,然后只在 paint
方法中绘制它。
所以我是一个尝试使用 ImageIO 的初学者。谁能告诉我为什么我得到这个 pixelated-incomplete 精灵图? 这是代码
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)
部分,以获得单个单元格。
如果你想绘制整个精灵sheet,你可以使用:
g.drawImage(getImage("Numbers/icon0.png"), 0, 0, null);
您的原始代码将绘制 整个精灵 sheet,重新调整为 32x32。
PS:您可能不应该从 paint
方法中调用 repaint()
,因为那样会产生无限重绘循环。如果您希望您的组件重新绘制,请使用某种计时器以固定的时间间隔重新绘制您的组件。
PPS:您可能不应该在 paint 方法中执行 I/O(即读取图像),因为任何 I/O 操作都可能需要时间并使您的 UI 呆滞且反应迟钝。这也是不必要的,因为每次重绘时精灵 sheet 都不会改变。取而代之的是,先读取图像,然后只在 paint
方法中绘制它。