Sin más preámbulos, simplemente publicaré el código Java.
importar java.awt.Color; importar java.awt.Graphics; importar java.awt.image.BufferedImage; importar javax.swing.JFrame; importar javax.swing.JPanel; clase pública MeteorFly extiende JFrame = final int; (~)El número de meteoros final int SLEEP = ; // La velocidad del vuelo del meteorito (cuanto mayor es el valor, más lenta es la velocidad) final int COLORLV = ; (~) Escala de color (puede cambiar el tamaño del halo) final String COLOR = null // ("#"~"#ffffff") Color del halo (si no está completo o es nulo, es el color predeterminado) final int TAMAÑO = ; // (~) Panel MyPanel privado de tamaño; public MeteorFly() { panel = new MyPanel(); this.getContentPane().add(panel); Cree un formulario this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public static void main(String[] args) { new MeteorFly() } class MyPanel extiende JPanel implements Runnable { Meteor p[]; AppletWidth, AppletHeight; gráficos fuera de pantalla de imagen almacenada en búfer; drawOffScreen; Thread pThread; public MyPanel() { setBackground(Color.black); //Inicialización del formulario AppletWidth = ; p = new Meteor[MAX]; ] = nuevo Meteor(); OffScreen = nueva Imagen Buffered(AppletWidth, AppletHeight, BufferedImage.TYPE_INT_BGR); drawOffScreen = OffScreen.getGraphics(); pThread = new Thread(this); pThread.start() } @Override public void paintComponent(Graphics g) { // TODO Método generado automáticamente stub super.paintComponents( g); g.drawImage(OffScreen,,, this } @Override final public void); run() { while (true) { // drawOffScreen.clearRect(, , AppletWidth, AppletHeight); // // Limpia la pantalla para (int i = ; i < MAX; i++) { drawOffScreen.setColor(p[i] .color); // color RGB drawOffScreen.fillOval(p[i].x, p[i].y, TAMAÑO, TAMAÑO); p[i].x += p[i].mx; p[i].y += p[i].my; // si (p[i].x > AppletWidth || p[i].y > AppletHeight) { // p[i].reset(); // } int x = p[i].x; int y = int R = p[i].color.getRed( ); // Extraer color int G = p[i].color.getGreen(); int B = p[i].color.getBlue() while (true) { if (R == && G == && B == ) { break; } R -= COLORLV; // Desvanece el color de la cola si (R < ) { R = } G -= COLORLV; { B = } Color color = new Color(R, G, B); x -= p[i].mx // Cubrir la cola y -= p[i].my; drawOffScreen .fillOval(x, y, TAMAÑO, TAMAÑO } if (x > AppletWidth || y > AppletHeight) { //); El meteoro sale volando por la ventana, reinicia el meteoro p[i].reset(); } } repaint(); try { Thread.sleep(SLEEP } catch (InterruptedException e) { // TODO Bloque de captura generado automáticamente; e.printStackTrace (); } } } } class Meteor { // Meteor class int x, y // Posición del meteorito int mx, my // Velocidad de caída color; // Color del meteorito public Meteor() { reset(); public void reset() { int rand = (int) (Math.random() * ); = (int) (Math.random() * ); y = } else { y = (int) (Math.random() * ); (Math.random() * + ); // Genera aleatoriamente velocidad y ángulo de caída my = (int) (Math.random() * + ); color = nuevo Color( // Color aleatorio (nuevo Doble(Math.random() * )).intValue() + , (nuevo Doble(Math.random() * )).intValue() + , (nuevo Double(Math.random() * )).intValue() + } else { color = Color.decode(COLOR);El código anterior es el código Java puro que este artículo le indica para implementar meteoritos en el cielo. Espero que compartir este artículo pueda brindarle beneficios inesperados.