Как добавить еще один движущийся объект анимации Java
код который представлен ниже рисует один круг который движется вниз. Вопрос таков: Как создать еще один объект который будет двигаться в другую сторону и как реализовать возможность добавлять сколько угодно объектов со своим условием движения? Например чтобы один двигался вверх, а другой вниз или чтобы один из них двигался медленнее другого.
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestPaint extends JFrame {
public TestPaint(){
setTitle("Test");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(320,345);
setLocation(400,400);
add(new TestField());
setVisible(true);
}
public static void main(String[] args) {
TestPaint testPaint = new TestPaint();
}
}
class TestField extends JPanel implements ActionListener {
private final int DOT_SIZE = 1; // Размерность на сколько пикселей движется точка
private int x;
private int y;
private Timer timer;
private boolean left = false;
private boolean right = false;
private boolean up = false;
private boolean down = true;
public TestField(){
setBackground(Color.black);
init();
timer = new Timer(100,this);
timer.start();
}
public void init(){
x = 48;
y = 48;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawOval(x,y, 10, 10);
}
public void move(){
if(left){
x -= DOT_SIZE;
}
if(right){
x += DOT_SIZE;
}
if(up){
y -= DOT_SIZE;
}
if(down){
y += DOT_SIZE;
}
}
@Override
public void actionPerformed(ActionEvent e) {
move();
repaint();
}
}
Насколько я понял можно просто создать еще одну фигуру со своими условными x и y в методе paintComponent и уже в методе move реализовать как будут двигаться одна и другая, но можно ли это реализовать в более сокращенном виде. Например чтобы пользователь когда захотел создать новую фигуру он записывал в аргументах чтобы фигура двигалась например налево со скоростью 5 пиксель в момент времени или какой либо другой способ который можно предложить.
Ответы (1 шт):
Сейчас в классе TestField вьі обрабатьіваете одну фигуру. Вам надо тут иметь дело с коллекцией фигур (например, List<Shape>) и в цикле вьізьівать у каждой фигурьі метод move() и метод paint(). Ну естественно, скорость и направление инкапсулировать в каждую фигуру отдельно.