Java-игра с JavaFX Canvas |Холст перестает обновляться - PullRequest
0 голосов
/ 21 октября 2018

Я использую Java для создания игры с JavaFX Canvas.

Я передаю Canvas graphicsContext в мой GameLoop, который запускает дополнительный поток.Оттуда я передаю свой graphicsContext через ObjectHandler каждому объекту, который должен быть нарисован на холсте.

Он некоторое время работает таким образом, но затем холст каким-то образом останавливается и никакой объект не перерисовывается.Игра все еще работает в фоновом режиме.В журналах я вижу, что все объекты продолжают работать и обновляются.У кого-нибудь есть идея, почему это может быть или как я могу решить это?

Это моя часть из моего класса окон:

canvas = new Canvas(Config.getCANVAS_WIDTH(), Config.getCANVAS_HEIGHT());
canvas.setFocusTraversable(true);
gc = new GameContainer(canvas.getGraphicsContext2D(), canvas);
primaryStage.setTitle(gc.getTitle());
primaryStage.setResizable(false);

Это часть моего Gameloop:

if (render) {
    gc.clearRect(0, 0, width, height);
    handler.render(gc);
    gc.setFill(Color.GRAY);
    if (Config.isDebug()) {
         debugText.printDebug(fps);
    }
    frames++;
}

HandlerClass - это только список с arrayList и двумя циклами (для тиков и рендера).Это пример типичной функции рендеринга

public void render(GraphicsContext gc) {
    gc.save();
    gc.translate(x, y);
    gc.rotate(rotation);
    gc.setFill(Color.RED);
    gc.fillRect(-4, -4, 8, 8);
    gc.restore();
}

1 Ответ

0 голосов
/ 22 октября 2018

Рисунок на холсте с GraphicsContext должен быть в

Platform.runLater (() -> {});

См. JavavFX не является потокобезопасным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...