我试图在JavaFX中使用TranslateTransition对象来移动我正在构建的LOGO程序中的屏幕对象。我有一个屏幕上的TurtleDisplay对象,它扩展了ImageView,这就是我想要移动的东西。移动它的代码在这里:
public void drawTurtle(TurtleData currentData) {
TurtleImage inList = getTurtleImage(currentData);
if (inList==null) {
TurtleImage temp = new TurtleImage(currentData.getX(),
currentData.getY(), currentData.getHeading(), turtleImage);
myTurtlesGroup.getChildren().add(temp);
myTurtlesList.add(temp);
}
else {
TranslateTransition tt = new TranslateTransition(Duration.seconds(3),inList);
tt.setFromX(inList.getX());
tt.setFromY(inList.getY());
tt.setToX(inList.getX()+currentData.getX());
tt.setToY(inList.getY()+currentData.getY());
tt.setCycleCount(Timeline.INDEFINITE);
tt.play();
}
}
此代码是前端的一部分,通过ObservableList上的Listener从后端调用。后端包含这个ObservableTigraData对象列表,其中包含在屏幕上移动乌龟所需的信息 - 要移动的乌龟,移动到的坐标以及乌龟的旋转。调用它的代码在这里:
ObservableList<TurtleData> myTurtles = FXCollections
.observableArrayList();
myTurtles.addListener(new ListChangeListener<TurtleData>() {
@Override
public void onChanged(Change<? extends TurtleData> c) {
myDisplay.getSelectedWorkspace().getTV().clearTurtles();
while (c.next()) {
for (TurtleData addItem : c.getAddedSubList()) {
myDisplay.getSelectedWorkspace().getTV().drawTurtle(addItem);
}
}
}
});
我已经使用调试器并确保调用此代码 - 具体来说,运行tt.play()行。屏幕上没有任何动静。有谁知道什么是错的?我需要设置动画时间轴吗?谢谢你的帮助!