Maison > Java > javaDidacticiel > Comment puis-je créer une application Java qui affiche plusieurs balles rebondissantes sans qu'elles ne se chevauchent ?

Comment puis-je créer une application Java qui affiche plusieurs balles rebondissantes sans qu'elles ne se chevauchent ?

Patricia Arquette
Libérer: 2024-12-16 02:35:14
original
257 Les gens l'ont consulté

How can I create a Java application that displays multiple bouncing balls without them overlapping?

Balle rebondissante Java

Dans cet exemple, nous allons créer une application Java qui dessine plusieurs balles sur l'écran qui rebondissent sur les bords du cadre.

Problème

Lorsque vous essayez de dessiner plusieurs boules, elles s'écrasent les unes les autres car elles sont ajoutées à la même emplacement.

Solution

Pour résoudre ce problème, nous devons :

  1. Créer une liste de balles : Nous utiliserons un ArrayList pour stocker les objets balle.
  2. Ajouter des balles au volet de contenu : À la place d'ajouter les objets balle directement au volet de contenu, nous les ajouterons à la liste.
  3. Dessiner des balles : Nous allons parcourir la liste et dessiner chaque balle à l'emplacement désigné .
  4. Mouvement de la poignée : Chaque balle aura son propre fil pour gérer son mouvement, garantissant ainsi qu'elles ne s'écrasent pas. autre.

Voici un code modifié qui implémente ces modifications :

import java.awt.*;
import javax.swing.*;
import java.util.ArrayList;
import java.util.List;

public class Ball extends JPanel implements Runnable {

    List<Ball> balls = new ArrayList<Ball>();
    Color color;
    int diameter;
    long delay;
    private int x;
    private int y;
    private int vx;
    private int vy;

    public Ball(String ballcolor, int xvelocity, int yvelocity) {
        if (ballcolor == "red") {
            color = Color.red;
        } else if (ballcolor == "blue") {
            color = Color.blue;
        } else if (ballcolor == "black") {
            color = Color.black;
        } else if (ballcolor == "cyan") {
            color = Color.cyan;
        } else if (ballcolor == "darkGray") {
            color = Color.darkGray;
        } else if (ballcolor == "gray") {
            color = Color.gray;
        } else if (ballcolor == "green") {
            color = Color.green;
        } else if (ballcolor == "yellow") {
            color = Color.yellow;
        } else if (ballcolor == "lightGray") {
            color = Color.lightGray;
        } else if (ballcolor == "magenta") {
            color = Color.magenta;
        } else if (ballcolor == "orange") {
            color = Color.orange;
        } else if (ballcolor == "pink") {
            color = Color.pink;
        } else if (ballcolor == "white") {
            color = Color.white;
        }
        diameter = 30;
        delay = 40;
        x = 1;
        y = 1;
        vx = xvelocity;
        vy = yvelocity;
    }

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        for (Ball ball : balls) {
            ball.paint(g2);
        }
    }

    public void run() {
        while (isVisible()) {
            try {
                Thread.sleep(delay);
            } catch (InterruptedException e) {
                System.out.println("interrupted");
            }
            move();
            repaint();
        }
    }

    public void move() {
        for (Ball ball : balls) {
            int newX = ball.x + ball.vx;
            int newY = ball.y + ball.vy;

            if(newX + ball.diameter > getWidth()) {
                ball.vx *= -1;
            }
            if(newY + ball.diameter > getHeight()) {
                ball.vy *= -1;
            }
            if(newX < 0) {
                ball.vx *= -1;
            }
            if(newY < 0) {
                ball.vy *= -1;
            }
            ball.x = newX;
            ball.y = newY;
        }
    }

    private void start() {
        while (!isVisible()) {
            try {
                Thread.sleep(25);
            } catch (InterruptedException e) {
                System.exit(1);
            }
        }
        Thread thread = new Thread(this);
        thread.setPriority(Thread.NORM_PRIORITY);
        thread.start();
    }

    public static void main(String[] args) {
        Ball ball1 = new Ball("red", 3, 2);
        Ball ball2 = new Ball("blue", 6, 2);
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(ball1);
        f.getContentPane().add(ball2);
        ball1.balls.add(ball1);
        ball2.balls.add(ball2);
        f.setSize(400,400);
        f.setLocation(200,200);
        f.setVisible(true);
        ball1.start();
        ball2.start();
    }
}
Copier après la connexion

Dans cette solution mise à jour :

  • Nous créons des objets Ball séparés et ajoutons les à une liste.
  • Nous parcourons la liste dans paintComponent pour dessiner tous les balles.
  • Chaque balle a son propre fil de mouvement, empêchant l'écrasement.
  • Nous implémentons également une méthode de démarrage pour garantir que le fil démarre une fois que le cadre est visible.

En suivant ces étapes, nous pouvons créer un programme qui réussit à dessiner plusieurs balles rebondissantes sur l'écran.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal