Содержимое Java AnimationTimer не отображается

-4

Я пытаюсь узнать, как работают анимации 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 и т.д. В конструктор, так что, действительно, если это причина, как мне разместить анимацию, например, в центре пограничной панели?

спросил(а) 2018-03-19T13:52:00+03:00 2 года, 6 месяцев назад
0
57

Вы забыли добавить 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();
}

ответил(а) 2018-03-19T14:04:00+03:00 2 года, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема