Без лишних слов, я просто опубликую для вас Java-код.
import java.awt.Color; импорт java.awt.Graphics; импорт javax.swing.JFrame; импорт javax.swing.JPanel; открытый класс MeteorFly { Final int MAX = ; (~)Количество метеоров Final int SLEEP = ; // Скорость полета метеора (чем больше значение, тем медленнее скорость) Final int COLORLV = ; (~)Уровень цвета (можно изменить размер ореола) Final String COLOR = null; // ("#"~"#ffffff")Цвет ореола (если он не заполнен или не равен нулю, это цвет по умолчанию) Final int SIZE = ; // (~) Размер Meteor приватная панель MyPanel; public MeteorFly() { Panel = new MyPanel(); this.getContentPane().add(panel); Создайте форму this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public static void main(String[] args) {new MeteorFly(); } class MyPanel расширяет JPanel реализует Runnable {Meteor p[]; AppletWidth, AppletHeight; внеэкранная графика; drawOffScreen; Thread pThread; public MyPanel() { setBackground(Color.black); //Инициализация формы AppletWidth = ; AppletHeight = ; p = new Meteor[MAX]; for (int i = ; i < MAX; i++) p[i++] ] = новый Метеор () = новый BufferedImage (AppletWidth, AppletHeight, BufferedImage.TYPE_INT_BGR); drawOffScreen = OffScreen.getGraphics(); pThread = new Thread(this); pThread.start(); } @Override public voidpaintComponent(Graphics g) { // TODO Автоматически созданная заглушка метода super.paintComponents( g); g.drawImage(OffScreen, , это } @Override Final Public void); run() { while (true) { // drawOffScreen.clearRect(, , AppletWidth, AppletHeight // // Очистка экрана for (int i = ; i < MAX; i++) { drawOffScreen.setColor(p[i]); . color); // Цвет RGB drawOffScreen.fillOval(p[i].x, p[i].y, SIZE, SIZE); p[i].x += p[i].mx; p[i].y += p[i].my // if (p[i].x > AppletWidth || p[i].y; > AppletHeight) { // p[i].reset(); // } int x = p[i].x; int y = p[i].y; int R = p[i].color.getRed( ); // Извлечь цвет int G = p[i].color.getGreen(); int B = p[i].color.getBlue(); while (true) { if (R == && G == && B == ) { перерыв } R -= COLORLV; // Угасание цвета хвоста if (R < ) { R = ; G -= COLORLV; if (G < ) { G = ; B -= COLORLV; { B = ; } Color color = new Color(R, G, B); x -= p[i].mx // Закрываем хвост y -= p[i].my; drawOffScreen.setColor(color); drawOffScreen .fillOval(x, y, SIZE, SIZE } if (x > AppletWidth || y > AppletHeight) { //); Метеор вылетает из окна, сбросьте метеор p[i].reset(); } } repaint(); try { Thread.sleep(SLEEP } catch (InterruptedException e) { // TODO Автоматически сгенерированный блок catch e.printStackTrace (); } } } } class Meteor { // Класс метеора int x, y; // Позиция метеора int mx, my // Скорость падения Color; color; // Цвет метеора public Meteor() { reset(); } public void reset() { int rand = (int) (Math.random() * ); // Генерируем случайное местоположение метеора if (rand > ) { x); = (int) (Math.random() * ); y = ; } else { y = (int) (Math.random() * ); mx = (int) (Math.random() * + ); //Случайно генерируем скорость и угол падения my = (int) (Math.random() * + ); if (COLOR == null || COLOR.length() == ) { color = new Color( // Случайный цвет (new Double(Math.random() * )).intValue() + , (new Double(Math.random() * )).intValue() + , (new Double(Math.random() * )).intValue() + } else { color = Color.decode(COLOR);Приведенный выше код представляет собой чистый Java-код, который рассказывается в этой статье для реализации метеоров по небу. Я надеюсь, что распространение этой статьи принесет вам неожиданную пользу.