我在Windows上遇到以下错误(但不是在OSX上):
Exception in thread "Engine" java.lang.IllegalArgumentException: Width (0) and height (0) cannot be <= 0
at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)
at java.awt.image.BufferedImage.<init>(Unknown Source)
at sun.java2d.pipe.DrawImage.renderImageXform(Unknown Source)
at sun.java2d.d3d.D3DDrawImage.renderImageXform(Unknown Source)
at sun.java2d.pipe.DrawImage.transformImage(Unknown Source)
at sun.java2d.pipe.DrawImage.scaleImage(Unknown Source)
at sun.java2d.pipe.DrawImage.scaleImage(Unknown Source)
at sun.java2d.pipe.ValidatePipe.scaleImage(Unknown Source)
at sun.java2d.SunGraphics2D.drawImage(Unknown Source)
at sun.java2d.SunGraphics2D.drawImage(Unknown Source)
at simpleEngine.graphics.GameGraphics.drawGameObject(GameGraphics.java:27)
使用以下代码:
public void drawGameObject(GameObject obj, BufferedImage image) {
graphics2d.rotate(obj.getRotation(), obj.getX() + obj.getWidth()/2, obj.getY() + obj.getHeight()/2);
graphics2d.drawImage(image, (int) obj.getX(), (int) obj.getY(), (int) obj.getWidth(), (int) obj.getHeight(), null);
graphics2d.rotate(-obj.getRotation(), obj.getX() + obj.getWidth()/2, obj.getY() + obj.getHeight()/2);
}
GameObject是一个在空间中表示的对象。它具有字段位置(双x和y),大小(双倍宽度和高度)和旋转(两倍的rad)以及上述字段的getter和setter。
我不明白的是零高度和宽度的来源。在这种情况下,obj的宽度和高度为30,图像的宽度和高度为535。
任何和所有帮助将不胜感激!
提前致谢!
编辑: 启动类时提供对Graphics2D对象的引用。这个方法来自的类是Graphics2D的包装器,其方法简化了我的项目中的工作。当我检索Graphics2D时,我将它包装在这个类中并传递它。 (感谢MadProgrammer指出缺少信息!)
我发现如果从drawGameObject中删除了旋转代码,问题就解决了。它不会获得现金,但没有旋转的精灵。
我发现旋转是NaN并导致了问题。仍然不知道为什么它不会在OS X上抱怨..
答案 0 :(得分:0)
我发现旋转是一个NaN,并在用它旋转图形时导致问题。仍然不知道为什么它没有抱怨OS X虽然..
答案 1 :(得分:0)
如果你真的像你所写的那样使用你的陈述,那么错误就在最后一行:
graphics2d.rotate(obj.getRotation(), obj.getX() + obj.getWidth()/2, obj.getY() + obj.getHeight()/2);
您已撰写-obj.getRotation()