所以对于wanky冠军。没想出一个简短的怀孕描述。
我的问题是这些代码行:
ii = new ImageIcon("images/player.png");
image = ii.getImage();
image = image.getScaledInstance(SCALED_X, SCLAED_Y, Image.SCALE_SMOOTH);
positionX = windowWidth / 2 - image.getWidth() / 2;
positionY = windowHeight - image.getHeight();
当我调试代码时,我注意到在调用getScaledInstance函数之后图像的高度和宽度为-1,因此最后两行返回错误的结果。我想出的解决方法是使用SCALED_X和SCALED_Y作为新的高度和宽度但不是那么漂亮 - .- 任何人都可以解释为什么这样,即高度和宽度的值为-1?使用getScaledInstance函数时这些属性是否丢失(在文档中找不到任何关于该属性的文字)?有没有办法再次将它们添加到Image中?
有没有办法减小图像的大小并保持分别。自动调整属性?
编辑:
更改了代码以获取图片:
try {
image = ImageIO.read(new File("images/player.png")).getScaledInstance(SCALED_X, SCLAED_Y, Image.SCALE_SMOOTH);
} catch (IOException e) {
e.printStackTrace();
}
-1的错误仍然存在:(
答案 0 :(得分:0)
读取所用方法的Javadocs表示当您调用getHeight / getWidth时图像尚未缩放:
getScaledInstance():
创建此图像的缩放版本。将返回一个新的Image对象,默认情况下将以指定的宽度和高度呈现图像。即使原始源图像已经完全加载,新的Image对象也可以异步加载。
的getHeight():
确定图像的高度。 如果尚未知道高度,则此方法返回-1
您有几个选项:您可以等待图像缩放,或者在宽度和高度可用时使用ImageObserver计算所需的值,或使用SCALED_X/Y
常量而不是image.getWidth /高度,或通过创建新的BufferedImage并将旧图像绘制到新图像上来自己缩放图像。
另一种可能性是简单地假设玩家图像的大小正确 - 这将使你的游戏加载更快,并且玩家将在游戏中完全按照艺术家绘制的方式出现。