Mail.ru
Почта
Мой Мир
Одноклассники
ВКонтакте
Игры
Знакомства
Новости
Календарь
Облако
Заметки
Все проекты
Все проекты
выход
Регистрация
Вход
Категории
Все вопросы проекта
Компьютеры, Интернет
Темы для взрослых
Авто, Мото
Красота и Здоровье
Товары и Услуги
Бизнес, Финансы
Наука, Техника, Языки
Философия, Непознанное
Города и Страны
Образование
Фотография, Видеосъемка
Гороскопы, Магия, Гадания
Общество, Политика, СМИ
Юридическая консультация
Досуг, Развлечения
Путешествия, Туризм
Юмор
Еда, Кулинария
Работа, Карьера
О проектах Mail.ru
Животные, Растения
Семья, Дом, Дети
Другое
Знакомства, Любовь, Отношения
Спорт
Золотой фонд
Искусство и Культура
Стиль, Мода, Звезды
Полный список
Спросить
Лидеры
Поиск по вопросам
Ответы Mail.ru
Программирование
Android
C/C++
C#
iOS
Java
JavaScript
jQuery
SQL
Perl
PHP
Python
Веб-дизайн
Верстка, CSS, HTML, SVG
Системное администрирование
Другие языки и технологии
Вопросы - лидеры.
Алгоритмизация. WindowsForms. Помогите пожалуйста
1 ставка
Как установить Pyrogram и Telecrypto на windows 7?
1 ставка
Python задача помогите с решением
1 ставка
Пожалуйста, помогите найти шрифт
1 ставка
Задача яндекса python, помогите решить пж
1 ставка
Лидеры категории
Лена-пена
Искусственный Интеллект
М.И.
Искусственный Интеллект
Y.Nine
Искусственный Интеллект
•••
JAVA. Объясните, пожалуйста, код (метод gameUpdate())
Emil Vronski
Ученик
(85), на голосовании
4 года назад
Объясните, пожалуйста, код (детально метод gameUpdate())
https://pastebin.com/uZJagWT1
public class Main extends Application {
Pane root;
Rectangle player, bot;
Circle ball;
Line line;
AnimationTimer timer;
private final int WIDTH = 600, HEIGHT = 400;
private int speedX = 4, speedY = 4, dv = speedX, dy = speedY;
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Game");
primaryStage.setScene(new Scene(createContent()));
primaryStage.show();
primaryStage.getScene().setOnKeyPressed(event -> {
if (event.getCode() == KeyCode.UP)player.setLayoutY(player.getLayoutY()-30);
if (event.getCode() == KeyCode.DOWN)player.setLayoutY(player.getLayoutY()+30);
});
}
private Parent createContent(){
root = new Pane();
root.setPrefSize(WIDTH, HEIGHT);
root.setStyle("-fx-background-color: black");
line = new Line(WIDTH/2,0,WIDTH/2,HEIGHT);
line.setStroke(Color.WHITE);
bot = new Rectangle(10,80,Color.WHITE);
bot.setLayoutX(0);
bot.setLayoutY(HEIGHT/2-40);
player = new Rectangle(10,80,Color.WHITE);
player.setLayoutX(WIDTH-10);
player.setLayoutY(HEIGHT/2-40);
ball = new Circle(5);
ball.setFill(Color.WHITE);
ball.setStyle("-fx-background-color: white");
ball.setLayoutX(WIDTH/2);
ball.setLayoutY(HEIGHT/2);
root.getChildren().addAll(line,bot,player,ball);
timer = new AnimationTimer(){
@Override
public void handle(long now){
gameUpdate();
}
};
timer.start();
return root;
}
private void gameUpdate(){
double x = ball.getLayoutX(), y = ball.getLayoutY();
if (x <= 10 && y > bot.getLayoutY() && y < bot.getLayoutY()+80) dv = speedX;
if (x >= WIDTH-12.5 && y > player.getLayoutY() && y < player.getLayoutY()+80) dv = -speedX;
if (y <= 0 ) dy = speedY;
if (y >= HEIGHT-5) dy = -speedY;
ball.setLayoutX(ball.getLayoutX()+dv);
ball.setLayoutY(ball.getLayoutY()+dy);
if(x < WIDTH/2 && bot.getLayoutY() > y)bot.setLayoutY(bot.getLayoutY()-5);
if(x < WIDTH/2 && bot.getLayoutY()+80 < y)bot.setLayoutY(bot.getLayoutY()+5);
}
Голосование за лучший ответ
ппп
Мыслитель
(9213)
4 года назад
Там происходит изменение координат объектов "игры". Таймер вызывает этот метод с какой-то частотой, в результате чего создается впечатление о перемещении объектов
Похожие вопросы
public class Main extends Application {
Pane root;
Rectangle player, bot;
Circle ball;
Line line;
AnimationTimer timer;
private final int WIDTH = 600, HEIGHT = 400;
private int speedX = 4, speedY = 4, dv = speedX, dy = speedY;
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Game");
primaryStage.setScene(new Scene(createContent()));
primaryStage.show();
primaryStage.getScene().setOnKeyPressed(event -> {
if (event.getCode() == KeyCode.UP)player.setLayoutY(player.getLayoutY()-30);
if (event.getCode() == KeyCode.DOWN)player.setLayoutY(player.getLayoutY()+30);
});
}
private Parent createContent(){
root = new Pane();
root.setPrefSize(WIDTH, HEIGHT);
root.setStyle("-fx-background-color: black");
line = new Line(WIDTH/2,0,WIDTH/2,HEIGHT);
line.setStroke(Color.WHITE);
bot = new Rectangle(10,80,Color.WHITE);
bot.setLayoutX(0);
bot.setLayoutY(HEIGHT/2-40);
player = new Rectangle(10,80,Color.WHITE);
player.setLayoutX(WIDTH-10);
player.setLayoutY(HEIGHT/2-40);
ball = new Circle(5);
ball.setFill(Color.WHITE);
ball.setStyle("-fx-background-color: white");
ball.setLayoutX(WIDTH/2);
ball.setLayoutY(HEIGHT/2);
root.getChildren().addAll(line,bot,player,ball);
timer = new AnimationTimer(){
@Override
public void handle(long now){
gameUpdate();
}
};
timer.start();
return root;
}
private void gameUpdate(){
double x = ball.getLayoutX(), y = ball.getLayoutY();
if (x <= 10 && y > bot.getLayoutY() && y < bot.getLayoutY()+80) dv = speedX;
if (x >= WIDTH-12.5 && y > player.getLayoutY() && y < player.getLayoutY()+80) dv = -speedX;
if (y <= 0 ) dy = speedY;
if (y >= HEIGHT-5) dy = -speedY;
ball.setLayoutX(ball.getLayoutX()+dv);
ball.setLayoutY(ball.getLayoutY()+dy);
if(x < WIDTH/2 && bot.getLayoutY() > y)bot.setLayoutY(bot.getLayoutY()-5);
if(x < WIDTH/2 && bot.getLayoutY()+80 < y)bot.setLayoutY(bot.getLayoutY()+5);
}