JavaFX - рисование (змейка) в цикле

В настоящее время я играю с JavaFX, когда пишу игру Snake для своего финального проекта класса Java Fundamentals. Я не новичок в создании простых игр с анимацией, так как я сделал некоторые из них, используя модуль PyGame и SDL на C. В любом случае, теперь я довольно борюсь с пониманием корреляции некоторых объектов в JavaFX, особенно в сочетании с FXML SceneBuilder.

Я просто не могу понять, как создать эквивалент цикла игры, который я использовал для реализации в PyGame или SDL. Что я хочу сделать с приведенным ниже кодом, так это войти в игровой цикл, как только будет создан новый объект Game, и непрерывно отрисовывать состояние игры на gameCanvas, созданном в SceneBuilder. Я думаю, что смогу легко управлять всем этим позже, но я просто не могу понять, как создать законную связь между холстом FXML и игровым циклом, который я хочу запустить.

GameController.java

public class GameController implements Initializable, ControlledScreen {

@FXML
private Canvas gameCanvas;

@Override
public void setScreenParent(ScreensController screenPage) {
    // THIS IS FOR SCENE MANAGEMENT CONCEPT

}

Game.java

public class Game implements Runnable {

    public static final int EASY = 1,
                            MEDIUM = 2,
                            HARD = 3;

    int difficultyLevel, score = 0;
    Snake snake;
    Food food;
    boolean isRunning = true;


    public void setLevelEasy() {
        difficultyLevel = EASY;
    }

    public void setLevelMedium() {
        difficultyLevel = MEDIUM;
    }

    public void setLevelHard() {
        difficultyLevel = HARD;
    }

    @Override
    public void run() {
        while (isRunning) {

        }

    }

}



    @Override
    public void initialize(URL location, ResourceBundle resources) {
        // TODO Auto-generated method stub

    }   

}

См. svanimpe.be/blog/game-loops и svanimpe.be/blog/game-loops-fx (краткая версия: используйте AnimationTimer).

James_D 01.05.2018 23:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
504
1

Ответы 1

Вы не можете использовать файл FXML для создания новой сцены. Используйте это вместо

public class Screen extends Application implements Runnable
{
    @Override
    public void start ( Stage primaryStage )
    {
        Pane pane = new Pane ();
        Scene scene = new Scene(pane,500,300);
        primaryStage.setScene ( scene );
        primaryStage.show ();
    }

    @Override
    public void run ()
    {
        launch ();
    }
}

все, что вы хотите добавить, попадает в элемент панели вашего холста и т. д. и, кстати, сделайте трудность enum not int как

enum {easy,medium,hard}

таким образом никто не может установить уровень сложности, чтобы чего-то не было.

Другие вопросы по теме