发了几次才成功!
下落方法
downTl = TimelineBuilder.create()
.cycleCount(Timeline.INDEFINITE)
.keyFrames(new KeyFrame(Duration.seconds(0.5), event -> {
down();
}
))
.build();
private void down(){
......省略
yoffset.set(yoffset.get() + 1);
}
向左
private void left(){
......省略
xoffset.set(xoffset.get() - 1);
}
向右
private void right(){
......省略
xoffset.set(xoffset.get() + 1);
}
块要动,关键是修改layoutX, lauoutY,这需要绑定
gameBlock.layoutXProperty().bind(Bindings.createDoubleBinding(() -> {
return gameWin.getLayoutX() + xoffset.get()*Config.SQUARE_SIZE;
}, xoffset));
gameBlock.layoutYProperty().bind(Bindings.createDoubleBinding(() -> {
return gameWin.getLayoutY() + yoffset.getValue()*Config.SQUARE_SIZE;
}, yoffset));
一旦xoffset,yoffset变,layoutX, lauoutY,跟着变, 块不就动了吗!
这类似java 中的repaint, paint(Graphics g) 这是两者不同点。
下落方法
downTl = TimelineBuilder.create()
.cycleCount(Timeline.INDEFINITE)
.keyFrames(new KeyFrame(Duration.seconds(0.5), event -> {
down();
}
))
.build();
private void down(){
......省略
yoffset.set(yoffset.get() + 1);
}
向左
private void left(){
......省略
xoffset.set(xoffset.get() - 1);
}
向右
private void right(){
......省略
xoffset.set(xoffset.get() + 1);
}
块要动,关键是修改layoutX, lauoutY,这需要绑定
gameBlock.layoutXProperty().bind(Bindings.createDoubleBinding(() -> {
return gameWin.getLayoutX() + xoffset.get()*Config.SQUARE_SIZE;
}, xoffset));
gameBlock.layoutYProperty().bind(Bindings.createDoubleBinding(() -> {
return gameWin.getLayoutY() + yoffset.getValue()*Config.SQUARE_SIZE;
}, yoffset));
一旦xoffset,yoffset变,layoutX, lauoutY,跟着变, 块不就动了吗!
这类似java 中的repaint, paint(Graphics g) 这是两者不同点。