我目前正在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));
所有瓷砖都按照相同的方式缩放和定位。
首次开始游戏时,几乎没有延迟。但是,当窗口调整大小并且所有属性都更改时,客户端会冻结。我的问题是:有没有办法优化这个大小调整?我应该采用与这些属性不同的方式吗?如果是这样,最有效的是什么?