调整2D JavaFX游戏的大小

时间:2017-03-06 15:42:19

标签: java optimization javafx 2d game-engine

我目前正在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);
    }
}

所有对象的大小和位置都基于这些tileWidthPropertytileHeightProperty变量,如下所示:

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));

所有瓷砖都按照相同的方式缩放和定位。

首次开始游戏时,几乎没有延迟。但是,当窗口调整大小并且所有属性都更改时,客户端会冻结。我的问题是:有没有办法优化这个大小调整?我应该采用与这些属性不同的方式吗?如果是这样,最有效的是什么?

0 个答案:

没有答案