调整2D JavaFX游戏的大小

调整2D JavaFX游戏的大小,java,optimization,javafx,2d,game-engine,Java,Optimization,Javafx,2d,Game Engine,我目前正在用JavaFX制作我的第一个基于磁贴的游戏,并且很早就遇到了一个问题。我想让游戏中的对象(包括地图)的大小随着窗口的大小而调整,这样,如果调整窗口的大小,您将无法看到游戏的更大部分 我正在使用一个Scale类来计算瓷砖的大小。为了使它负责重新缩放窗口,它使用属性。viewport变量是一个矩形,具有窗口的宽度和高度: public class Scale { private static DoubleProperty widthProperty, heightP

我目前正在用JavaFX制作我的第一个基于磁贴的游戏,并且很早就遇到了一个问题。我想让游戏中的对象(包括地图)的大小随着窗口的大小而调整,这样,如果调整窗口的大小,您将无法看到游戏的更大部分

我正在使用一个
Scale
类来计算瓷砖的大小。为了使它负责重新缩放窗口,它使用属性。
viewport
变量是一个矩形,具有窗口的宽度和高度:

public class Scale {        
    private static DoubleProperty widthProperty, heightProperty;
    private static DoubleBinding tileWidthProperty, tileHeightProperty;

    public static void initialize(Rectangle viewport){
        widthProperty = viewport.widthProperty();
        heightProperty = viewport.heightProperty();

        tileWidthProperty = tileHeightProperty = new DoubleBinding() {
            {
              super.bind(widthProperty, heightProperty); // initial bind
            }

            @Override
            protected double computeValue() {
              return Math.round(Math.max(widthProperty.get(), heightProperty.get())/32);
            }
        };
    }

    public static DoubleBinding x(int n){
        return tileWidthProperty.multiply(n);
    }

    public static DoubleBinding y(int n){
        return tileHeightProperty.multiply(n);
    }
}
所有对象的大小和位置都基于这些
tileWidthProperty
tileHeightProperty
变量,如下所示:

Tree tree = new Tree();
tree.widthProperty.bind(Scale.x(2));
tree.heightProperty.bind(Scale.y(3));
tree.xProperty.bind(Scale.x(12));
tree.yProperty.bind(Scale.x(2));
所有瓷砖都以相同的方式缩放和定位


当第一次开始游戏时,几乎没有延迟。但是,当窗口大小调整且所有属性更改时,客户端将冻结。我的问题是:有没有任何方法可以优化这种调整?我应该用不同的方式来处理这些属性吗?如果是这样,什么是最有效的?

我对JavaFX一无所知,但当我尝试与Java类似的东西时,我使用了双缓冲。如果我没记错的话,我会先渲染一个BuffereImage,然后缩放它以适应视口。希望这有帮助,或者至少是进一步研究的一个指针。@domdom JavaFX使用基于脉冲的渲染机制:双缓冲在这里没有任何区别。应用程序是否完全冻结(即挂起?)。还是只是变得很慢?我怀疑您的逻辑中还有其他错误:例如,当
缩放
中的属性更改时,您的
视口
正在更改大小,这将导致无限递归。@James\D应用程序完全冻结约半分钟,然后再次正常运行。
viewport
的大小与
primaryStage
的大小相关联-这不应该导致无限递归,对吗?嗯。你可以用任何方法创建一个演示这个问题的视图吗?我对JavaFX一无所知,但当我尝试与Java类似的东西时,我使用了双缓冲。如果我没记错的话,我会先渲染一个BuffereImage,然后缩放它以适应视口。希望这有帮助,或者至少是进一步研究的一个指针。@domdom JavaFX使用基于脉冲的渲染机制:双缓冲在这里没有任何区别。应用程序是否完全冻结(即挂起?)。还是只是变得很慢?我怀疑您的逻辑中还有其他错误:例如,当
缩放
中的属性更改时,您的
视口
正在更改大小,这将导致无限递归。@James\D应用程序完全冻结约半分钟,然后再次正常运行。
视口的大小
primaryStage
的大小相关联-这不应该导致无限递归,对吗?嗯。您可以创建一个演示该问题的?