Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 2
Регистрация: 17.02.2017
Сообщений: 33

Создание анимации в GridPane

01.03.2017, 20:53. Показов 1310. Ответов 1

Студворк — интернет-сервис помощи студентам
Здравствуйте, не могу ни как придумать как сделать анимацию передвижения зеленой точки по столбцам и строчкам (именно так), а так же чтобы она обходила препятствия. Это будет лабиринт и идея в том, что игрок нажимает на панель и если возможно обойти препятствия, и не слишком далеко, то точка перемещается в клетку нажатия (именно в клетку).

Никак не получается.

Скриншот:
Панель

Основной класс:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package maze.gui;
    
import java.io.IOException;
import java.util.ArrayList;
 
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Point2D;
import javafx.stage.Stage;
import javafx.util.Duration;
import maze.Maze;
import maze.Player;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.HLineTo;
import javafx.scene.shape.Line;
import javafx.scene.shape.LineTo;
 
public class GUI extends Application {
    Player[] player;
    Maze maze;
    ArrayList<Line> lines;
    Stage stage;
    Pane selPane;
    Pane gamePane;
    Pane startPane;
    Scene selScene;
    Scene startScene;
    Scene gameScene;
    Controller contr;
    GridPane gpane;
    Circle cir;
    
    public GUI(){
        maze = new Maze(this);
        lines = new ArrayList<Line>();
        player = new Player[1]; 
        player[0] = new Player(Color.GREEN,0,0);
        
    }
    
    public void init(){
        try {
            contr = new Controller(this);
            
            startPane = (Pane) loader("MainPain.fxml",contr);
            selPane = (Pane) loader("SelectPain.fxml", contr);
            gamePane = (Pane) loader("GamePain.fxml",contr);
            
            startScene = new Scene(startPane);
            selScene = new Scene(selPane);
            gameScene = new Scene(gamePane);
            
            gpane = contr.gridPane;
            for(int i = 0;i<player.length;i++){
                Player p = player[i];
                cir = p.c;
                gpane.add(cir,p.column.getValue(),p.row.getValue());
                System.out.println("Эммм");
            }
        } catch (Exception e) {
            
            e.printStackTrace();
        }
        
    }
    
    @Override
    public void start(Stage primaryStage) {
        try {
            stage = primaryStage; 
            stage.setScene(startScene);
            stage.setTitle("Лабиринт");
            stage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }}
    
    Object loader(String s, Controller c){
        FXMLLoader load = new FXMLLoader(getClass().getResource(s));
        load.setController(c);
        Object loadL = null;
        try {
         loadL = load.load();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return loadL;
    }
    
    public void animationPlayer(int row,int column,Player p,double x,double y){
        ;
    
    }
    
    public void startGame(){
        
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}
Контроллер GridPane:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package maze.gui;
 
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.geometry.Point2D;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.GridPane;
import javafx.scene.shape.Line;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
 
public class Controller {
    @FXML private Button playButton;
    @FXML private Button optionButton;
    @FXML private Button exitButton;
    @FXML private Button onlineButton;
    @FXML private Label infoLabel;
    @FXML private Button menuButton;
    @FXML private TextField messageField;
    @FXML private TextArea messageArea;
    @FXML public GridPane gridPane; 
    @FXML private Button sendButton;
    GUI g;
    
    public Controller(GUI g){
        this.g = g;}
 
    public void handleButtonAction(ActionEvent event){
        Object events = event.getSource();
        try{
        if(events==playButton){     
            ObservableList<Node> child = gridPane.getChildren();
            child(child);
             System.out.println("Кликнул");
             g.gpane = gridPane;
             g.stage.setScene(g.selScene);}
        if(events==optionButton){
            System.out.println("Кликнул1");}
        if(events==exitButton){
            System.out.println("Кликнул2");}
        if(events==onlineButton){
            g.stage.setScene(g.gameScene);
             System.out.println("Кликнул3");}
        if(events==sendButton){
            System.out.println("Кликнул4");
            
        }
        }catch(Exception e){
            e.printStackTrace();
             System.out.println("Кликнул exc");
        }}
    void child(ObservableList<Node> ch){
        for(Node n:ch){
             if((n.getClass()).toString().contains("javafx.scene.shape.Line")){
                 Line k = (Line)n;
                 System.out.println("Линия "+k.getLayoutX()+" "+k.getLayoutY()+" "+k.getClass());
                 g.lines.add((Line)n);
                 
             }if(n.getClass().toString().contains("javafx.scene.shape.Circle")){
                 System.out.println("Фигня"+n.getLayoutX()+" "+n.getLayoutY()+" "+n.getClass());
                 g.cir =(Circle) n;
             }
            
        }
    }
    
    public void handlePressedButton(ActionEvent event){
        System.out.println("Кнопка");
        }
    
    public void handleMouse(MouseEvent event){
        
        
        
        g.animationPlayer(3,5,g.player[0],event.getX(),event.getY());
        
        System.out.println("Кнопка мыши ");
    }
}
Сама панель написана FXML (корневая панель и GridPane):
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<?xml version="1.0" encoding="UTF-8"?>
 
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.shape.Line?>
<?import javafx.scene.text.Font?>
 
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="500.0" prefWidth="700.0" style="-fx-background-color: BLACK;" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <TextArea fx:id="messageArea" layoutY="360.0" opacity="0.0" prefHeight="96.0" prefWidth="314.0">
         <font>
            <Font name="Comic Sans MS" size="12.0" />
         </font></TextArea>
      <TextField fx:id="messageField" layoutX="14.0" layoutY="461.0" onAction="#handlePressedButton" prefHeight="25.0" prefWidth="248.0" style="-fx-background-color: DARKBLUE; -fx-text-fill: ORANGE;">
         <font>
            <Font name="Comic Sans MS" size="13.0" />
         </font>
      </TextField>
      <Button fx:id="menuButton" layoutX="599.0" layoutY="458.0" mnemonicParsing="false" onAction="#handleButtonAction" prefHeight="31.0" prefWidth="87.0" style="-fx-background-color: ORANGE;" text="МЕНЮ" textFill="#1cc306">
         <font>
            <Font name="Comic Sans MS Bold" size="14.0" />
         </font>
      </Button>
      <Label fx:id="infoLabel" layoutX="14.0" layoutY="14.0" prefHeight="31.0" prefWidth="236.0" textFill="#d78501">
         <font>
            <Font name="Comic Sans MS" size="20.0" />
         </font>
      </Label>
      <Button fx:id="sendButton" layoutX="278.0" layoutY="460.0" mnemonicParsing="false" onAction="#handleButtonAction" prefHeight="31.0" prefWidth="87.0" style="-fx-background-color: ORANGE;" text="Отправить" textFill="#d00909">
         <font>
            <Font name="Comic Sans MS Bold" size="13.0" />
         </font>
      </Button>
      <GridPane fx:id="gridPane" alignment="TOP_RIGHT" gridLinesVisible="true" layoutY="-2.0" onMouseClicked="#handleMouse" prefHeight="455.0" prefWidth="700.0">
        <columnConstraints>
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
          <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
          <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
        </columnConstraints>
        <rowConstraints>
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
          <RowConstraints minHeight="10.0" prefHeight="30.0" valignment="TOP" vgrow="SOMETIMES" />
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
        </rowConstraints>
         <children>
            <Line layoutX="194.0" layoutY="148.0" scaleX="0.0" startY="7.0" stroke="WHITE" strokeLineCap="ROUND" strokeWidth="8.0" style="-fx-translate-x: 10;" GridPane.columnIndex="2" GridPane.rowIndex="2" />
            <Line endY="35.0" stroke="WHITE" strokeLineCap="ROUND" strokeWidth="8.0" style="-fx-translate-x: 10;" GridPane.columnIndex="4" GridPane.rowIndex="1" />
            <Line endY="14.0" stroke="WHITE" strokeLineCap="ROUND" strokeWidth="8.0" style="-fx-translate-x: 10;" GridPane.columnIndex="6" GridPane.rowIndex="1" />
            <Line endX="20.0" stroke="WHITE" strokeLineCap="ROUND" strokeWidth="8.0" GridPane.columnIndex="5" />
            <Line startY="7.0" stroke="WHITE" strokeLineCap="ROUND" strokeWidth="8.0" style="-fx-translate-x: 10;" GridPane.columnIndex="7" GridPane.rowIndex="1" />
            <Line endX="7.0" stroke="WHITE" strokeLineCap="ROUND" strokeWidth="8.0" style="-fx-translate-x: 5;" translateX="5.0" GridPane.columnIndex="3" GridPane.rowIndex="1" />
         </children>
      </GridPane>
   </children>
</Pane>
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.03.2017, 20:53
Ответы с готовыми решениями:

Создание анимации в Java
На данный момент программа выдает множество .png картинок, которые я собираю в gif-анимацию (пример анимашки вложен). Делать эту приходится...

Создание анимации из картинок
Доброго времени суток. Хочу попробовать создать анимацию из картинок в java, но нигде не могу найти нормальной русскоязычной литературы,...

Создание анимации
мне надо создать пример анимации в делфи, вбил все данные программа не запускается и выделяет строку:...

1
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
03.03.2017, 01:38
Используйте Path Transition.
Моя логика : Шар и сетка на панели. Обявить переменную координаты, доступные как шару так и эл.сетке. Вычислить(или "взять") координаты нужной клетки, и использовать их как конечная цель анимации "Path Transition". Если есть препятствия то спользовать либо "кривую" по которой будет двигаться шар(не знаю как) либо использовать последовательное выполнение несколько "Path Transition" анимаций.
Я сам изучаю fx (сейчас сделал паузу на пару месяцев) и после будет интересно посмотреть что у вас вышло.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2017, 01:38
Помогаю со студенческими работами здесь

создание анимации
помогите сделать анимацию вот такого механизма, пожалуйста

Создание анимации
Добрый день, вечер, ночи дорогие форумчане! Недавно наткнулся на один сайт - http://valentina-fashion.kz/. Очень понравилась...

Создание анимации
Помогите исправить ошибку в анимации unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes,...

создание анимации
помогите, пожалуйста, сделать анимацию. задание на самой картинке, а в графике на делфи у меня слабо. Задание нужно выполнить в delphi...

Создание анимации js
Нужно создать анимацию, есть несколько картинок. Я пытаюсь сделать это рекурсивно, но почему-то таймер не работает, и просто при нажатии на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru