Sem mais delongas, vou apenas postar o código java para você.
importar java.awt.Color; importar java.awt.Graphics; importar java.awt.image.BufferedImage; importar javax.swing.JPanel; (~)O número de meteoros final int SLEEP = ; // A velocidade do vôo do meteoro (quanto maior o valor, mais lenta a velocidade) final int COLORLV = ; (~) Escala de cores (pode alterar o tamanho do halo) final String COLOR = null; // ("#"~"#ffffff") Cor do halo (se não preenchido ou nulo, é a cor padrão) final int SIZE = ; // (~) Tamanho do meteoro private MyPanel panel; public MeteorFly() { panel = new MyPanel(); Crie um formulário this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); public static void main(String[] args) { new MeteorFly(); AppletWidth, AppletHeight; gráficos fora da tela com buffer; drawOffScreen; Thread pThread; public MyPanel() { setBackground(Color.black); //Inicialização do formulário AppletWidth = ; p = new Meteor[MAX]; ] = novo Meteoro(); OffScreen = novo BufferedImage(AppletWidth, AppletHeight, BufferedImage.TYPE_INT_BGR); drawOffScreen = OffScreen.getGraphics(); pThread = new Thread(this); pThread.start(); g); g.drawImage(OffScreen, , , this } @Override final public void); run() { while (true) { // drawOffScreen.clearRect(, , AppletWidth, AppletHeight); // Limpa a tela para (int i = ; i < MAX; i++) { drawOffScreen.setColor(p[i] .color); // cor 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; ); // Extrair cor int G = p[i].color.getGreen(); int B = p[i].color.getBlue() { if (R == && G == && B == ) { break; } R -= COLORLV; // Cor da cauda desbotada if (R < ) { R = } G -= COLORLV; { B = ; } Cor cor = new Color(R, G, B); drawOffScreen .fillOval(x, y, SIZE, SIZE } if (x > AppletWidth || y > AppletHeight) { // O meteoro voa para fora da janela, redefina o meteoro p[i].reset(); e.printStackTrace (); } } } } class Meteor { // Classe do meteoro int x, y; // Posição do meteoro int mx, my; color; // Cor do meteoro public Meteor() { reset() } public void reset() { int rand = (int) (Math.random() * ); = (int) (Math.random() * ); y = } senão { y = (int) (Math.random() * ); (Math.random() * + ); //Gerar aleatoriamente velocidade e ângulo de queda my = (int) (Math.random() * + ); color = new Color( // Cor aleatória (new Double(Math.random() * )).intValue() + , (new Double(Math.random() * )).intValue() + , (new Double(Math.random() * )).intValue() + } else { color = Color.decode(COLOR);O código acima é o código Java puro que este artigo informa para implementar meteoros no céu. Espero que compartilhar este artigo possa trazer ganhos inesperados.