当前位置: 首页 > article >正文

Java流星雨

 

系列文章

序号直达链接
1Java李峋同款可写字版跳动的爱心
2Java制作一个无法拒绝的表白界面
3Java满屏飘字代码
4Java满屏表白代码
5Java黑客帝国字母雨
6Java大雪纷飞
7Java方块圣诞树
8Java简单圣诞树
9Java心形曲线
10Java炫酷烟花
11Java精美圣诞树
12Java跨年烟花
13Java爱心泡泡
14Java球球大作战小游戏
15Java满天繁星
16Java漂浮爱心
17Java模拟星空
18Java蓝色跳动的爱心
19Java在线订餐系统
20Java鲜花商店系统
21Java书店管理系统
22Java汽车租贷系统
23Java自助取款系统①
24Java自助取款系统②
25Java数据挖掘系统
敬请期待……

写在前面

Java语言实现流星雨动画的完整代码。

技术需求

  1. Java Swing 图形绘制

    • 继承 JPanel 并重写 paintComponent(Graphics g) 方法进行自定义绘制。
    • 使用 Graphics2D 进行高级绘图,如 setStroke() 设置线条粗细、setColor() 设定颜色、drawLine() 画流星轨迹。
  2. 定时动画 (javax.swing.Timer):使用 Timer30ms 间隔 触发 ActionListener,驱动流星运动并刷新界面。

  3. 面向对象编程(OOP)

    • Meteor 类封装流星的属性(位置、速度、颜色)和行为(移动、绘制、重置)。
    • MeteorShower 作为流星管理器,控制多个 Meteor 并实现动画。
  4. 数学计算(几何运动):采用 三角函数 (Math.cos()Math.sin()) 计算流星沿 30° 角 方向的运动轨迹。

  5. 颜色与随机性 (java.util.Random)

    • 生成随机长度、速度和位置,使流星运动多样化。
    • 设定 蓝色调 RGB 颜色 (Color(rand.nextInt(156) + 100, rand.nextInt(156) + 100, 255))。
  6. 事件驱动与 GUI 线程管理:通过 SwingUtilities.invokeLater() 确保 UI 操作在 事件调度线程 运行,避免 GUI 闪烁或卡顿。

  7. Java AWT 2D 绘图优化

    • BasicStroke(2) 设定流星线条宽度,使其更清晰。
    • setBackground(Color.BLACK) 设定黑色背景,增强对比度。
  8. 窗口管理 (JFrame)JFrame 作为主窗口,添加 MeteorShower 面板,设定尺寸 (setSize(1200, 800)) 并启用关闭按钮 (setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE))。

完整代码

import javax.swing.*;
import java.awt.*;
import java.util.Random;

public class StarryVortex extends JPanel {
    // 屏幕尺寸
    private static final int WIDTH = 1200;
    private static final int HEIGHT = 700;

    // 粒子类
    static class Particle {
        double t;         // 初始角度
        double speed;     // 角速度
        double scale;     // 半径
        Color color;      // 颜色
        double x, y;      // 粒子的位置

        public Particle() {
            Random rand = new Random();
            t = rand.nextDouble() * 2 * Math.PI;     // 随机初始角度
            speed = rand.nextDouble() * 0.02; // 随机速度
            scale = rand.nextDouble() * 999;         // 随机轨迹半径
            color = Color.WHITE;                     // 星星的颜色
            updatePosition();
        }

        // 更新角度和位置
        public void update() {
            t += speed;
            if (t > 2 * Math.PI) {
                t -= 2 * Math.PI;  // 重置角度
            }
            updatePosition();
        }

        // 更新粒子的位置
        private void updatePosition() {
            x = Math.cos(t) * scale;
            y = Math.sin(t) * scale;
        }

……

代码分析

这段 Java 代码实现了一个流星雨动画,利用 Swing 库进行图形绘制,并结合 Timer 控制流星的运动。下面我们对代码进行详细分析,涵盖其结构、关键技术点、运行原理。


1. 代码结构概述

代码主要由两个类组成:

  1. Meteor 类:表示单个流星,控制其位置、速度、颜色、运动轨迹和重置逻辑。
  2. MeteorShower 类:继承 JPanel,用于管理所有流星并进行绘制和动画控制。

此外,main 方法位于 MeteorShower 类中,用于创建 JFrame 窗口并启动动画。


2. Meteor 类分析

Meteor 类用于表示单个流星,包含流星的基本属性和行为。

(1) 属性定义

  • x, y:流星的当前位置坐标。
  • length:流星的长度(即尾迹长度)。
  • speed:流星的移动速度。
  • color:流星的颜色,这里选择了蓝色调。
  • angle:流星的运动角度,设定为 30°。
  • rand:静态随机数生成器,用于初始化流星的属性。

(2) 构造方法与初始化

  • Meteor 类的构造方法调用 reset() 方法,对流星进行初始化。
  • length 取随机值,控制流星尾迹的长度。
  • speed 设定在 [10, 30] 范围内,保证不同流星速度各异。
  • x, y 均设定为负值,确保流星初始时在屏幕外,从左上角斜向进入画面。
  • color 设定为蓝色调(R 和 G 分量在 [100, 255] 之间,B 分量固定为 255)。

(3) 运动逻辑

  • xy 坐标按照角度 angle=30° 计算运动增量,实现流星的斜向运动。
  • xy 超出窗口 (1200×800),调用 reset() 重新生成流星。

(4) 绘制流星

  • g2d.setColor(color); 设定流星颜色。
  • g2d.setStroke(new BasicStroke(2)); 设定线条粗细,使流星更清晰。
  • drawLine(x, y, x2, y2); 画出流星,起点是 (x, y),终点根据长度 length 计算。

3. MeteorShower 类分析

MeteorShower 继承 JPanel,用于管理所有流星并定期刷新动画。

(1) 成员变量

  • 存储 Meteor 对象的动态数组,模拟多个流星。

(2) 构造方法

  • 创建 100 颗流星,并存入 meteors 列表。
  • Timer 以 30ms 间隔触发事件,使流星不断移动并刷新画面。

(3) 绘制流星

  • setBackground(Color.BLACK); 设定黑色背景,模拟夜空。
  • 遍历 meteors 列表,调用 draw(g); 依次绘制所有流星。

4. 主函数 (main 方法)

  • JFrame frame = new JFrame("流星雨"); 创建主窗口。
  • frame.add(panel); 添加 MeteorShower 面板。
  • frame.setSize(1200, 800); 设置窗口大小。
  • frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 关闭窗口时退出程序。
  • frame.setVisible(true); 显示窗口。

5. 运行原理总结

  1. 初始化流星MeteorShower 创建 100 颗 Meteor 并存入列表。

  2. 定时刷新动画Timer 以 30ms 间隔触发 move()repaint(),模拟流星运动。

  3. 绘制流星paintComponent() 负责绘制背景和所有流星。

  4. 碰撞检测:当流星超出窗口,调用 reset() 重新生成,确保流星雨连续不断。


6. 总结

本代码通过 Java Swing 结合 Graphics2D 绘制流星雨动画,利用 Timer 控制流星运动,并通过 reset() 机制循环生成新流星,最终形成流畅的动态效果。

写在后面

我是一只有趣的兔子,感谢你的喜欢。


http://www.kler.cn/a/553769.html

相关文章:

  • (蓝桥杯——10. 小郑做志愿者)洛斯里克城志愿者问题详解
  • 数据结构-----双向链表
  • 面试知识点2
  • React useState 和 useEffect 使用坑点注意总结
  • 【微信小程序】订阅消息
  • 【DeepSeek服务器部署全攻略】Linux服务器部署DeepSeek R1模型、实现API调用、搭建Web页面以及专属知识库
  • 【数据挖掘】ARFF格式与数据收集
  • 健康养生:从生活细节开启活力之旅
  • Windows 启动 SSH 服务
  • android社畜模拟器
  • 信息学奥赛c++语言:数组逆序重存放
  • JavaScript 前端面试 3(等于、全等、instanceof、typeof 、原型、原型链)
  • 当一个后端下载了一个VUE开源项目,怎么开始着手玩一下
  • Spring中的日志
  • Linux的基础指令和环境部署,项目部署实战(下)
  • 【DeepSeek】Mac m1电脑部署DeepSeek
  • 校园网架构设计与部署实战
  • Linux学习笔记之进程切换
  • 微服务SpringCloudAlibaba组件Spring Cloud Gateway网关教程【详解gatway网关以及各种过滤器配置使用,附有示例+代码】
  • 一个简单的ubuntu/开发板初始化脚本