【发布时间】:2018-06-10 08:46:36
【问题描述】:
我正在用 javaFx 制作游戏。我的游戏中实体的渲染方式取决于它们的“角度”字段之一,如下所示:
gc.save();
gc.transform(new Affine(new Rotate(angle, getCenterX(), getCenterY())));
gc.drawImage(image, x, y);
gc.restore();
“Gc”是GraphicsContext。 getCenter 方法将使用图像的高度和宽度。但是,图像未正确渲染。我进行了一些测试,发现当我使用 get Width 方法时,它实际上返回了图像的高度。当我调用 get Height 方法时,它会返回宽度。我的猜测是,这是因为我使用的 png 图像已相对于其原始状态旋转了 90 度。但是,当我去预览并查看它们的大小时,似乎一切都很好。我尝试复制图像,但它并没有真正起作用。任何想法如何解决这一问题?我没有可验证的代码示例,因为我相信这个问题与 png 文件和 javaFx 的 Image 方法的属性比我的程序逻辑更相关。
这是可验证的代码示例:
import javafx.embed.swing.JFXPanel;
import javafx.scene.image.Image;
public class TestImage {
public static void main(String[] args) {
// TODO Auto-generated method stub
JFXPanel jfxPanel = new JFXPanel();
Image BLUE01 = new Image("/blue01.png");
System.out.println("height : "+ BLUE01.getHeight());
System.out.println("wdith : "+ BLUE01.getWidth());
}
}
【问题讨论】:
-
image.getWidth()的方法定义在哪里?
-
@Aaron 这是一个javaFx方法docs.oracle.com/javase/8/javafx/api/toc.htm
-
假设
getWidth也通过当前图形上下文是否合理?如果去掉旋转的线,它是否工作正常? -
@usr2564301 我将 Image 创建为 public static final,因此它不应该受到 GraphicsContext 的任何影响...
-
@usr2564301 我删除了转换线,但似乎 getHeight 和 getWidth 方法仍然返回与我在预览中看到的不同的数字......而且我确定我没有使用错误的图像,因为我只有 3 张图像,在资源文件夹中都是 16*16,而程序将 18 和 20 打印为宽度和高度...