Мне нужно сделать упражнение на свинг Java.
- Нарисуйте простой круг / шар (готово)
- Переместить круг (сделано)
- из начальной точки (половина jpanel (x), 0 (y)) переместите этот круг / шар, которые следуют направлению арки, и отскок, когда круг касается конца стороны экрана (в моем случае это окно только x : 0-300 у: 0-300, это очень маленькие окна)
когда конец экрана (см. рисунок, который я привел ниже) продолжает подпрыгивать при движении арки вдоль боковых сторон экрана до тех пор, пока мяч не вернется в исходное положение, нет необходимости быть точно в исходном положении, но отскок должен быть бесконечным и непрерывным (извините за мой английский )
https://imgur.com/jNtxeld
Какая функция мне нужна для выполнения движения арки? я не могу использовать graphic2d или существующий класс в Java, мне нужна функция, чтобы подать заявку на x, y для перемещения этого шара
Я знаю формулу арки из математики, но я не знаю, как применить в Java в этом случае, я думаю, мне нужна функция для получения всех точек положения арки, а затем я могу применить к x и y для перемещения мяча .
помощь
у меня есть этот код
public class Ani2 extends JPanel implements Runnable{
private final int DELAY =105;
public Ani2(){
JFrame jf = new JFrame();
jf.setSize(300,300);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(this);
jf.setVisible(true);
}
private Thread animator;
int x=150, y=150;
@Override
public void addNotify() {
super.addNotify();
animator = new Thread(this);
animator.start();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(red);
Graphics2D g2d = (Graphics2D)g;
g2d.fillOval(x,y, 20, 20);
g.dispose();
}
public static void main(String[] args) {
new Ani2();
}
@Override
public void run() {
long beforeTime, timeDiff, sleep;
beforeTime = System.currentTimeMillis();
while (true) {
x += 1;
y -= 1;
repaint();
timeDiff = System.currentTimeMillis() - beforeTime;
sleep = DELAY - timeDiff;
if (sleep < 0)
sleep = 2;
try {
Thread.sleep(sleep);
} catch (InterruptedException e) {
System.out.println("interrupted");
}
beforeTime = System.currentTimeMillis();
}
}
}