首頁 > Java > java教程 > 如何建立一個顯示多個彈跳球而不重疊的 Java 應用程式?

如何建立一個顯示多個彈跳球而不重疊的 Java 應用程式?

Patricia Arquette
發布: 2024-12-16 02:35:14
原創
259 人瀏覽過

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

Java 彈跳球

在此範例中,我們將建立一個 Java 應用程序,在螢幕上繪製多個從框架邊緣彈起的球。

問題

當嘗試繪製多個球時,它們會相互覆蓋,因為它們被添加到相同位置。

解決方案

要解決此問題,我們需要:

  1. 建立球列表:我們將使用一個ArrayList 來儲存球物件。
  2. 將球加入內容中窗格: 我們不會將球物件直接新增至內容窗格,而是將它們新增至清單。
  3. 繪製球: 我們將迭代列表並繪製每個球都在其指定位置。
  4. 處理運動:每個球都有自己的線程來處理其運動,確保它們不會互相覆蓋。

這是實現這些變更的修改後的程式碼:

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();
    }
}
登入後複製

在此更新的解決方案中:

  • 我們建立單獨的Ball 物件並將它們新增至清單。
  • 我們迭代paintComponent 中的列表來繪製所有
  • 每個球都有自己的運動線程,防止覆蓋。
  • 我們也實作了一個 start 方法來確保執行緒在幀可見後啟動。

按照以下步驟,我們就可以創建一個程序,成功在螢幕上繪製多個彈跳球。

以上是如何建立一個顯示多個彈跳球而不重疊的 Java 應用程式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板