效果:

代码:

package com.example.flowerdemo;/*** @author ZhaoXu* @date 2023/1/17 15:07*/import javax.imageio.ImageIO;
import javax.swing.*;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.IOException;/*** @author zhaoxu*/
public class FlowerTest extends Applet implements MouseListener, Runnable {int xClick, yClick;static int panelLength = 1920;static int panelHeight = 1080;static int areaSize = 100;/*** 阻力加速度*/static int f = 8;/*** 初速度*/static int speedV0 = 40;static String imageStr64 = "iVBORw0KGgoAAAANSUhEUgAAACoAAAAWCAYAAAC2ew6NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExODIyQUY2RkM2MzQ2NTcyNyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyQ0M3NzgwODI4QkQxMUU4QTk1N0QwMEMxRjNFMzNEMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyQ0M3NzgwNzI4QkQxMUU4QTk1N0QwMEMxRjNFMzNEMyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDE4MDExNzQwNzIwNjgxMTgyMkFGNkZDNjM0NjU3MjciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDE4MDExNzQwNzIwNjgxMTgyMkFGNkZDNjM0NjU3MjciLz4gPC9yZGY6RGVzY3Jp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";FlowerTest() {addMouseListener(this);}@Overridepublic void paint(Graphics g) {//        BufferedImage image = null;
//        try {//            image = ImageIO.read(new FileInputStream("src\\main\\resources\\backGround.png"));
//        } catch (IOException e) {//            throw new RuntimeException(e);
//        }
//        getGraphics().drawImage(image, 0, 0, getSize().width, getSize().height, this);super.paint(g);}@Overridepublic void paintComponents(Graphics g) {super.paintComponents(g);}/*** 使该程序能够作为应用程序执行。*/public static void main(String args[]) {FlowerTest FlowerTest = new FlowerTest();JFrame frame = new JFrame("FlowerTest by:zx");frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});frame.getContentPane().add(FlowerTest, BorderLayout.CENTER);frame.setSize(panelLength, panelHeight);//背景色黑色FlowerTest.setBackground(Color.BLACK);FlowerTest.init();FlowerTest.start();frame.setVisible(true);}/*** 点击会产生一个线程来执行烟花升空*/public void run() {//需要一个线程级变量来存储单个线程的坐标double threadx = Math.random() * panelLength;double thready = 0;// 旋转角度int speed = (int) (Math.random() * (4 + 4 + 1)) - 4;// 速率
//        int speed = (int) (Math.random() * (3 + 3 + 1)) - 3;while (speed == 0) {speed = (int) (Math.random() * (4 + 4 + 1)) - 4;}//新建一个Graphics变量Graphics graphics = getGraphics();BufferedImage image = null;try {image = ImageIO.read(new FileInputStream("src\\main\\resources\\flower.png"));} catch (IOException e) {throw new RuntimeException(e);}double moveTimesx = 0;double moveTimesy = 0;double nowy = thready;double nowx = threadx;while (panelHeight >= nowy || nowx <= panelLength) {moveTimesx++;moveTimesy++;nowy = thready + Math.abs(speed * moveTimesy);if (nowx >= 0 && nowx <= panelLength - 50) {nowx = threadx + speed * moveTimesx;} else {threadx = nowx < 0 ? 0 : panelLength - 50;moveTimesx = 0;nowx = 0;speed = -speed;continue;}BufferedImage newImage = rotate(image, (int) (speed * moveTimesy));graphics.drawImage(newImage, (int) nowx, (int) nowy, null);
//            if (nowy < 0 || nowy > panelHeight - 50) {//                break;
//            }try {Thread.sleep(30);} catch (InterruptedException e) {throw new RuntimeException(e);}graphics.clearRect((int) nowx, (int) nowy, newImage.getWidth(), newImage.getHeight());}}public void mouseClicked(MouseEvent e) {}/*** 监听鼠标按键** @param e*/public void mousePressed(MouseEvent e) {xClick = e.getX();yClick = e.getY();while (true) {Thread thread = new Thread(this);thread.start();try {Thread.sleep(1200);} catch (InterruptedException ex) {throw new RuntimeException(ex);}}}public void mouseReleased(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}/*** 对图片进行旋转** @param src   被旋转图片* @param angel 旋转角度* @return 旋转后的图片*/public static BufferedImage rotate(Image src, int angel) {angel = Math.abs(angel);int src_width = src.getWidth(null);int src_height = src.getHeight(null);// 计算旋转后图片的尺寸Rectangle rect_des = calcRotatedSize(new Rectangle(new Dimension(src_width, src_height)), angel);BufferedImage res = null;res = new BufferedImage(rect_des.width, rect_des.height,BufferedImage.TYPE_INT_RGB);Graphics2D g2 = res.createGraphics();// 进行转换g2.translate((rect_des.width - src_width) / 2,(rect_des.height - src_height) / 2);g2.rotate(Math.toRadians(angel), src_width / 2.0, src_height / 2.0);g2.drawImage(src, null, null);return res;}/*** 计算旋转后的图片** @param src   被旋转的图片* @param angel 旋转角度* @return 旋转后的图片*/public static Rectangle calcRotatedSize(Rectangle src, int angel) {// 如果旋转的角度大于90度做相应的转换if (Math.abs(angel) >= 90) {if (Math.abs(angel) / 90 % 2 == 1) {int temp = src.height;src.height = src.width;src.width = temp;}angel = Math.abs(angel) % 90;if (angel < 0) {angel = -angel;}}double r = Math.sqrt(src.height * src.height + src.width * src.width) / 2;double len = 2 * Math.sin(Math.toRadians(angel) / 2) * r;double angel_alpha = (Math.PI - Math.toRadians(angel)) / 2;double angel_dalta_width = Math.atan((double) src.height / src.width);double angel_dalta_height = Math.atan((double) src.width / src.height);int len_dalta_width = (int) (len * Math.cos(Math.PI - angel_alpha- angel_dalta_width));int len_dalta_height = (int) (len * Math.cos(Math.PI - angel_alpha- angel_dalta_height));int des_width = src.width + len_dalta_width * 2;int des_height = src.height + len_dalta_height * 2;return new Rectangle(new Dimension(des_width, des_height));}
}

java实现花瓣飘落效果相关推荐

  1. 基于snowfall的玫瑰花瓣飘落效果

    玫瑰花瓣飘落效果 做专题时,常常需要添加一些动效,可以让我们的页面活起来  就像最近某电商网站一系列雪花飘落效果  看了网上封装的snowfall.js配置挺方便的,用起来也蛮好的 用法 1.首先引入 ...

  2. 安卓动态壁纸源码--可直接进入壁纸设置界面+玫瑰花瓣飘落效果+可分享到微博、微信功能--无任何删减2

    1.宙斯之眼动态壁纸是作者向喜欢的女孩表白被拒绝后,在失眠的深夜所做.仅以此作送给自己喜欢的女孩,以及所有能够感同身受的人!同时也送给自己,定格那种难以言表的复杂心情. 2.可以设置动态切换壁纸  可 ...

  3. android 自定义View实现花瓣飘落效果

    在偶然的一次看到别人的动画效果特别好就来实现一个花瓣飘落的效果, 原理就是不断变化坐标,不停的修改坐标值 package com.lzx.lock;import android.content.Con ...

  4. Unity3D 使用粒子组件实现花瓣飘落效果

    可直接使用的花瓣飘落资源包

  5. java之雪花飘落效果的实现(撩妹小程序)

    第一章:程序的思路分析 1.思路分析 程序采用面向对象的思想,包含主程序,面板类和雪花类. 主程序用来生成窗口,存放面板等作用. 面板类用来存放背景图片,存放生成的雪花对象,定时去刷新雪花的位置,形成 ...

  6. html 花瓣飘落效果,html全屏花瓣掉落特效

    代码片段和文件信息 属性            大小     日期    时间   名称 ----------- ---------  ---------- -----  ---- 文件        ...

  7. js+css实现花瓣飘落效果

    <div class="main pop-box"></div> css: @keyframes wind{0% {bottom: 100%;transfo ...

  8. java线程动画例子,动画 线程 花瓣飘落的效果 animation

    [实例简介] android 线程 花瓣飘落的效果 很唯美! [实例截图] [核心代码] AnimationThread └── AnimationThread ├── AndroidManifest ...

  9. java实现物体下落效果_手撸一个物体下落的控件,实现雪花飘落效果

    效果图: 圣诞登录页.gif 参考文章: Android自定义View--从零开始实现雪花飘落效果 感谢原文作者,不仅实现了效果,并且写得非常详细,还做了优化.笔者参考原文作者的源码,做了一点修改,实 ...

最新文章

  1. 团队作业—第二阶段06
  2. python web服务器学习笔记(五) 并发尝试之popen原理探究
  3. 7分钟了解科大讯飞开发者节:AI红利期来临,全新1024计划发布(未完待续)
  4. sql2008安装时提示参数不能为空_Java Validation API,实现参数的合法性校验
  5. wince bib文件合成
  6. 手机通讯加密软件Peerio上架,代码全部开源
  7. 关于微信安卓版计步作弊器
  8. vue axios中文文档详解
  9. JAVA自学知识点评定标准--自尚学堂马士兵
  10. 【quartus】用原理图输入法设计4位全加器
  11. 【pytest官方文档】解读-fixtures函数和测试函数的参数化
  12. app模式会被第三方平台模式取代吗_第三方APP逐渐被替代?网友:手机自带的足够用了...
  13. Kotlin 启用新 Logo,似乎更有寓意?
  14. XTPToolKitPro常用功能
  15. NRF51822蓝牙初学笔记1.0之 GAP笔记
  16. shell脚本中计算时间差
  17. jQuery是什么?
  18. 机房一体化监测解决方案
  19. Stam的流体solver学习笔记
  20. 熊工巧匠 | 绘制高颜值的电路接线图,让你的创客项目赢在起跑线上

热门文章

  1. isis network-entity 49含义_Brother数据备份方法 及 各文件含义介绍
  2. windows添加默认路由
  3. 教育资源平台html代码,一师一优课国家教育资源平台:http://1s1k.eduyun.cn/portal/html/1s1k/index/1.html...
  4. 石家庄独特的地理位置容易出现雾霾天气
  5. python怎么退出全屏_在notepad++中怎么退出全屏模式
  6. 1.进入线性代数的奇妙世界:长期挨踢的IT人怎么定义线性代数
  7. 品《人生》之感,思“人生”之路
  8. android gif 下拉刷新,下拉刷新数据gif动画下拉框
  9. 新品国产C2000,QX320F280049C,独立双核32位CPU,主频高达400MHz
  10. 新冠疫苗预约接种小程序