Sans plus tarder, je publierai simplement le code Java pour vous.
importer java.awt.Color; importer java.awt.Graphics; importer java.awt.image.BufferedImage; importer javax.swing.JPanel ; classe publique MeteorFly extends JFrame { final int MAX = ; (~)Le nombre de météores final int SLEEP = ; // La vitesse de vol du météore (plus la valeur est grande, plus la vitesse est lente) final int COLORLV = // (~) Échelle de couleurs (peut changer la taille du halo) final String COLOR = null; // ("#"~"#ffffff") Couleur du halo (si elle n'est pas renseignée ou nulle, c'est la couleur par défaut) final int SIZE = ; // (~) Panneau MyPanel privé de taille Meteor ; public MeteorFly() { panel = new MyPanel(); Créez un formulaire this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public static void main(String[] args) { new MeteorFly(); } class MyPanel extends JPanel implémente Runnable { Meteor p[]; AppletWidth, AppletHeight ; Graphiques BufferedImage OffScreen ; drawOffScreen; Thread pThread; public MyPanel() { setBackground(Color.black); //Initialisation du formulaire AppletHeight = ; p = new Meteor[MAX]; ] = new Meteor(); OffScreen = new BufferedImage(AppletWidth, AppletHeight, BufferedImage.TYPE_INT_BGR); drawOffScreen = OffScreen.getGraphics(); pThread = new Thread(this); pThread.start(); } @Override public void paintComponent(Graphics g) { // TODO Stub de méthode généré automatiquement super.paintComponents( g); g.drawImage(OffScreen, , , this); } @Override final public void run() { while (true) { // drawOffScreen.clearRect(, , AppletWidth, AppletHeight); // // Effacer l'écran pour (int i = ; i < MAX; i++) { drawOffScreen.setColor(p[i] . color); // Couleur RVB drawOffScreen.fillOval(p[i].x, p[i].y, SIZE, SIZE); 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 = p[i].y; int R = p[i].color.getRed( ); // Extraire la couleur int G = p[i].color.getGreen(); int B = p[i].color.getBlue(); while (true) { if (R == && G == && B == ) { break; } R -= COLORLV; // Fondu la couleur de la queue if (R < ) { R = ; } G -= COLORLV; { B = ; } Color color = new Color(R, G, B); x -= p[i].mx; // Couvre la queue y -= p[i].my; drawOffScreen.setColor(color); drawOffScreen .fillOval(x, y, TAILLE, TAILLE); } if (x > AppletWidth || y > AppletHeight) { // Le météore vole par la fenêtre, réinitialisez le météore p[i].reset(); } } repaint(); try { Thread.sleep(SLEEP } catch (InterruptedException e) { // TODO Bloc de capture généré automatiquement e.printStackTrace (); } } } } class Meteor { // Classe Meteor int x, y; // Position du météore int mx, my // Vitesse de chute Couleur; color; // Couleur du météore public Meteor() { reset(); } public void reset() { int rand = (int) (Math.random() * ); = (int) (Math.random() * ); y = ; } else { y = (int) (Math.random() * ); (Math.random() * + ); //Générer de manière aléatoire la vitesse et l'angle de chute my = (int) (Math.random() * + ); if (COLOR == null || COLOR.length() == ) { color = new Color( // Couleur aléatoire (new Double(Math.random() * )).intValue() + , (new Double(Math.random() * )).intValue() + , (new Double(Math.random() * )).intValue() + ); } else { color = Color.decode(COLOR);Le code ci-dessus est le code Java pur que cet article vous explique pour implémenter des météores dans le ciel. J'espère que le partage de cet article pourra vous apporter des gains inattendus.