184 / 72 / 35
Регистрация: 09.05.2022
Сообщений: 388

Как остановить анимацию, когда перс не двигается?

27.04.2023, 16:24. Показов 1027. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В программе есть карта, по которой бегает человек. Надо было анимацию сделать при беге, но я смог сделать только постоянную анимацию. Надо сделать так, чтобы анимация работала только при движении, а когда перс на месте, то вместо анимации там картинка статичная "p1.jpeg".

Основной класс Game:
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
 
public class Game extends JFrame implements Runnable{
    private Area area = new Area();
    private ArrayList<Unit> units = new ArrayList<>();
    private int sizeX = 50;
    private int sizeY = 50;
    private int top = 100;
    private int left = 100;
    private boolean isWork = true;
    private BufferedImage wall;
    private BufferedImage house;
    private BufferedImage pers1;
    private BufferedImage pers2;
    private boolean isUnitOnFirstImage = true;
    private int selected = 0;
    public Game()  {
        Unit unit0 = new QueenFactory().getUnit(2,3);
        units.add(unit0);
 
        for (Unit unit: units) {
            unit.setArea(area);
        }
        //units[4] = new HorseFactory().getUnit(0,0);
        try {
            wall = ImageIO.read(new File("wall.jpeg"));
            house = ImageIO.read(new File("house.jpeg"));
            pers1 = ImageIO.read(new File("p1.jpeg"));
            pers2 = ImageIO.read(new File("p2.jpeg"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        this.setFocusable(true);
        this.addKeyListener(new KeyAdapter() {
            @Override
            public void keyTyped(KeyEvent e) {
                System.out.println(e.getKeyChar());
                if(e.getKeyChar()=='h'){
                    for (int _i = 0; _i < units.size(); _i++) {
                        units.get(selected).build();
                    }
                }
                //System.out.println(e.getKeyCode();
            }
        });
        this.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent e) {
                int x = (e.getX()-left)/sizeX;
                int y = (e.getY()-top)/sizeY;
                if(e.getButton()==MouseEvent.BUTTON1){
                    for (int _i = 0; _i < units.size(); _i++) {
                        if (x == units.get(_i).getX() && y == units.get(_i).getY()) {
                            selected = _i;
                        }
                    }
                }else if(e.getButton()==MouseEvent.BUTTON3) {
                    for (int _i = 0; _i < units.size(); _i++) {
                        units.get(selected).setTarget(x, y);
                    }
                }
                repaint();
            }
 
            @Override
            public void mousePressed(MouseEvent e) {
 
            }
 
            @Override
            public void mouseReleased(MouseEvent e) {
 
            }
 
            @Override
            public void mouseEntered(MouseEvent e) {
 
            }
 
            @Override
            public void mouseExited(MouseEvent e) {
 
            }
        });
        setLayout(new FlowLayout());
        setVisible(true);
        new Thread(this).start();
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosed(WindowEvent e) {
                isWork=false;
            }
        });
    }
    @Override
    public void run() {
        while(isWork){
            //unit.move();
            for (Unit unit: units) {
                unit.move();
            }
            repaint();
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }
    @Override
    public void paint(Graphics g) {
        this.createBufferStrategy(2);
        BufferStrategy bs = this.getBufferStrategy();
        g = bs.getDrawGraphics();
 
        super.paint(g);
        drawGrid(g);
        drawUnit(g);
 
        bs.show();
    }
 
    private void drawGrid(Graphics g) {
        int row = area.getMap().length;
        int col = area.getMap()[0].length;
        for (int _i = 0; _i < row+1; _i++) {
            g.drawLine(left, top+_i*sizeY, left+sizeX*col,top+_i*sizeY);
        }
        g.setColor(Color.blue);
        for (int _i = 0; _i < col+1; _i++) {
            g.drawLine(left+_i*sizeX, top, left+_i*sizeX,top+sizeY*row);
        }
        for (int _i = 0; _i < row; _i++) {
            for (int _j = 0; _j < col; _j++) {
                BufferedImage bi = null;
                if(area.getMap()[_i][_j]==Area.WALL) {
                    bi = wall;
                }else if(area.getMap()[_i][_j]==Area.HOUSE){
                    bi = house;
                }
                g.drawImage(bi,left+sizeX*_j,top+sizeY*_i,sizeX,sizeY, null);
                //g.fillRect(left+sizeX*_j,top+sizeY*_i,sizeX,sizeY);
            }
        }
    }
    private void drawUnit(Graphics g) {
        boolean a=false;
        for (Unit unit :units) {
            BufferedImage bi = null;
            if (unit instanceof Queen){
                if (unit.isStopped()) {
                    bi = pers1;
                } else {
                    if (isUnitOnFirstImage) {
                        bi = pers1;
                    } else {
                        bi = pers2;
                    }
                    a = true;
                }
                g.drawImage(bi,left+sizeX*unit.getX(),top+sizeY*unit.getY(),sizeX,sizeY, null);
            }
        }
        if (a) {
            isUnitOnFirstImage = !isUnitOnFirstImage;
        }
    }
 
 
 
 
 
    public static void main(String[] args) {
        //JFrame frame = new JFrame();
        Game frame = new Game();
        frame.setBounds(0,0,900,700);
        frame.setDefaultCloseOperation(2);
        JButton button = new JButton("Нажми на мене");
        JTextField field = new JTextField("Пока пусто");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                field.setText("Ураа! скоро пара кончится");
            }
        });
        frame.add(button);
        frame.add(field);
 
    }
 
}
Класс для Unit:
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
import java.util.ArrayList;
 
public abstract class Unit {
    private ArrayList<Point> path = new ArrayList<>();
    private Area area;
    private int x;
    private int y;
    private boolean isStopped = false;
 
    private int life = 100;
    public abstract void setTarget(int tx, int ty);
    public int getLife() {
        return life;
    }
 
    public Area getArea() {
        return area;
    }
 
    public void setLife(int life) {
        this.life = life;
    }
 
    public void setArea(Area area) {
        this.area = area;
    }
    public Unit(int x, int y) {
        this.x = x;
        this.y = y;
        //map[y][x] = 2;
    }
 
    public int getX() {
        return x;
    }
 
    public void setX(int x) {
        this.x = x;
    }
 
    public int getY() {
        return y;
    }
 
    public void setY(int y) {
        this.y = y;
    }
 
    public void move(){
        if(path.isEmpty()){
            return;
        }
        if (x == getX() && y == getY()) {
            isStopped = false;
        } else {
            isStopped = true;
        }
        Point p = path.get(0);
        path.remove(0);
        area.remove(x, y);
        //map[y][x] = 0;
        x = p.getX();
        y = p.getY();
        area.putItem(x,y);
        //map[y][x] = 2;
    }
    public boolean isStopped() {
        return isStopped;
    }
    public void setPath(ArrayList<Point> path) {
        this.path = path;
    }
 
    public void build() {
        area.putHouse(x, y);
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.04.2023, 16:24
Ответы с готовыми решениями:

Transform:rotate как остановить бесконечный цикл, ограничить количество кадров, остановить анимацию
Добрые люди, подскажиет советом, уже сломала голову. Перез загрузкой сайта идёт цикл вращения обьекта вокруг точки (иммитация загрузки) ...

2D платформер, мой перс медленно двигается и прыгает без остановки
понимаю что что-то не так в CharacterControllerScript. Но честно не понимаю где:-|:wall::help::help::help:

Как остановить анимацию
MoveAnimator = new Storyboard(); MoveAnimator.Completed += new EventHandler(MoveAnimator_Completed); ...

1
184 / 72 / 35
Регистрация: 09.05.2022
Сообщений: 388
27.04.2023, 16:27  [ТС]
Вот скрин.
Миниатюры
Как остановить анимацию, когда перс не двигается?  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.04.2023, 16:27
Помогаю со студенческими работами здесь

Как остановить анимацию?
Добрый день. У меня установлена анимация при входе курсора в объект, а когда курсор выходит из объекта элементы становятся на прежние...

Как остановить анимацию
Доброго времени суток. Есть две анимации которые работают по очереди, необходимо через определённое количество циклов остановить этот...

Как остановить анимацию?
Код var slideWidth=772; //var sliderTimer; $(function(){ ...

Как остановить анимацию
Как остановить анимацию в коде из другого контрола? ThicknessAnimation TA3 = new ThicknessAnimation(); TA3.From =...

Как остановить анимацию?
после завершения аниамации, изображение возвращается к исходному состоянию. а как сделать чтобы изображение повернулось на 30 градусов и...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru