Как заставить шарик двигаться используя цикл? - Java
Формулировка задачи:
Доброго всем дня.
Есть прога которая рисует круг при нажатии мышки и теперь мне нужно заставить этот круг двигатся и отбиватся от краев.Это нужно зделать с помощью цыкла(или цыклов).Только я вот не понимаю какой и как цыкл здесь задействовать .
Вот часть кода где я описываю панельку где рисую круг и событие(нажатие мышки) при котором появляется круг.
Если нужно будет скину весь код.
pan = new Panel() { public void paint(Graphics g) { Color newColor = new Color((int) (Math.random() * 255), (int) (Math.random() * 255),(int) (Math.random() * 255)); g.setColor(newColor); g.fillOval(X, Y, r, r); } }; pan.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { r = 70; X = e.getX() - r / 2; Y = e.getY() - r / 2; pan.repaint(); } });
Решение задачи: «Как заставить шарик двигаться используя цикл?»
textual
Листинг программы
package movingball; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import javax.swing.JFrame; import javax.swing.JPanel; public class MovingBall extends JPanel { BufferedImage img; int WIDTH; int HEIGHT; int X, Y, dx, dy, R; MovingBall() { WIDTH = 640; HEIGHT = 480; X = 0; Y = 0; dx = 1; dy = 1; R = 15; JFrame frame = new JFrame("movement"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setPreferredSize(new Dimension(WIDTH, HEIGHT)); img = new BufferedImage(WIDTH + R, HEIGHT + R, BufferedImage.TYPE_INT_BGR); frame.add(this); frame.pack(); javax.swing.Timer timer = new javax.swing.Timer(20, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (X + R < 0 | X + R > WIDTH) { dx *= (-1); } if (Y + R < 0 | Y + R > HEIGHT) { dy *= (-1); } X += dx; Y += dy; paintOnImg(); } }); timer.start(); frame.setResizable(false); frame.setVisible(true); } public void paintOnImg() { Graphics g = img.createGraphics(); g.setColor(Color.WHITE); g.fillRect(0, 0, WIDTH + R, HEIGHT + R); //cleaning the image; g.setColor(Color.RED); g.fillOval(X + R, Y + R, R, R); g.dispose(); repaint(); } @Override public void paint(Graphics g) { g.drawImage(img, 0, 0, null); } @Override public void update(Graphics g) { paint(g); } public static void main(String[] args) { new MovingBall(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д