Содержимое Java AnimationTimer не отображается
Я пытаюсь узнать, как работают анимации JavaFX, поэтому я попытался создать анимацию с Землей, движущейся по кругу, на основе этого урока: https://gamedevelopment.tutsplus.com/tutorials/introduction-to-javafx- для игры-разработки - cms-23835.
По какой-то причине сцена, которую я хочу показать, установлена на сцене, но графики или анимации нет. Я почти уверен, что это тривиально, я просто не могу найти причину. Здесь мой основной код класса:
public class Main extends Application {
private static Stage stage;
private static Window window;
private static Scene scWindow;
@Override
public void start(Stage primaryStage) {
stage = primaryStage;
stage.setTitle("Animation");
showWindow();
stage.show();
}
public static void showWindow() {
window = new Window();
scWindow = new Scene(window, 400, 400);
stage.setScene(scWindow);
}
public static void main(String[] args) {
launch(args);
}
}
и это код класса Window:
public class Window extends BorderPane {
final long startNanoTime = System.nanoTime();
Image earth = new Image("http://icdn.pro/images/en/g/o/google-earth-icone-8927-128.png");
Image space = new Image("https://space-facts.com/wp-content/uploads/magellanic-clouds.png");
GraphicsContext gc;
public Window() {
Group root = new Group();
Canvas canvas = new Canvas(512, 512);
gc = canvas.getGraphicsContext2D();
root.getChildren().add(canvas);
gc.setFill(Color.BLACK);
Anim a = new Anim();
a.start();
}
private class Anim extends AnimationTimer {
public void handle(long currentNanoTime)
{
double t = (currentNanoTime - startNanoTime) / 1000000000.0;
double x = 232 + 128 * Math.cos(t);
double y = 232 + 128 * Math.sin(t);
gc.drawImage( space, 0, 0 );
gc.drawImage( earth, x, y );
}
}
}
Никаких исключений не было, я понятия не имею, что случилось.
EDIT: Я знаю, что я не помещал ничего в setCenter/Left и т.д. В конструктор, так что, действительно, если это причина, как мне разместить анимацию, например, в центре пограничной панели?
Вы забыли добавить root
в сцену. Добавьте что-то вроде
setCenter(root);
к конструктору Window
.
Или просто используйте Canvas
как центр:
public Window() {
Canvas canvas = new Canvas(512, 512);
gc = canvas.getGraphicsContext2D();
setCenter(canvas);
gc.setFill(Color.BLACK);
Anim a = new Anim();
a.start();
}