2019独角兽企业重金招聘Python工程师标准>>>

  • 一个多彩泡泡屏保特效(JS+CSS版) https://my.oschina.net/darkness/blog/360394

    package screensaver;
    import java.awt.AlphaComposite;
    import java.awt.Composite;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Timer;
    import java.util.TimerTask;import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JPanel;import com.abigdreamer.infinity.common.util.IntegerValue;
    import com.sun.awt.AWTUtilities;@SuppressWarnings("restriction")
    public class BubblesScreensaver {// 常量static int D = 222; // 泡泡直径static double K = 0.999;static double POW_RATE = 0.0001; // 补偿概率static double POW_RANGE = 0.8; // 补偿范围(基于诞生速度)public static double SPEED_X() {return 8 + (RND() * 4);}public static double SPEED_Y() {return 6 + (RND() * 2);}static List<Bubble> arrBubs = new ArrayList<>();static double iBottom;static double iRight;public static double SQRT(double a) {return Math.sqrt(a);}public static double RND() {return Math.random();}static int clientWidth;static int clientHeight;public static void main(String[] args) {JFrame frame = new JFrame();frame.setAlwaysOnTop(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setUndecorated(true);frame.setExtendedState(JFrame.MAXIMIZED_BOTH);AWTUtilities.setWindowOpaque(frame, false);final JPanel pane = new JPanel() {private static final long serialVersionUID = 1L;@Overridepublic void paint(Graphics g) {super.paint(g);Graphics2D g2d = (Graphics2D) g;int n = arrBubs.size();for (int j = 0; j < n; j++) {Bubble bub = arrBubs.get(j);float v;g2d.translate(bub.x, bub.y);g2d.drawImage(bub.images[3], 0, 0, null);Composite old = g2d.getComposite();for (int i = 0; i < 3; i++) {v = (float) Math.abs(Math.sin(bub.kOpa[i] += bub.kStp[i] * Math.random()));v *= bub.POW[i];// v = ((v * 1e4) >> 0) / 1e4;AlphaComposite alphaComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, v);g2d.setComposite(alphaComposite);// 透明度g2d.drawImage(bub.images[i], 0, 0, null);// 背景}g2d.setComposite(old);g2d.translate(-bub.x, -bub.y);}}};pane.setOpaque(false);frame.setContentPane(pane);frame.setVisible(true);clientHeight = frame.getHeight();clientWidth = frame.getWidth();int MAX = 5;IntegerValue integerValue = new IntegerValue();Timer timer1 = new Timer();timer1.schedule(new TimerTask() {public void run() {if (integerValue.get() < MAX) {integerValue.add();CreateBubble(frame);} else {timer1.cancel();}}}, 10, 1000);// delay=2000毫秒 后执行该任务Timer timer = new Timer();timer.schedule(new TimerTask() {public void run() {update();pane.repaint();}}, 10, 17);// delay=2000毫秒 后执行该任务}public static void CreateBubble(JFrame frame) {Bubble bub = new Bubble();bub.setX(0);bub.setY(0);bub.vx = SPEED_X();bub.vy = SPEED_Y();arrBubs.add(bub);};public static void update() {int n = arrBubs.size();int i, j;updateWall();for (i = 0; i < n; i++) {Bubble bub = arrBubs.get(i);bub.vx *= K;bub.vy *= K;if (RND() < POW_RATE) {bub.vx = SPEED_X() * (1 + RND() * POW_RANGE);bub.vy = SPEED_Y() * (1 + RND() * POW_RANGE);}bub.setX(bub.x + bub.vx);bub.setY(bub.y + bub.vy);checkWalls(bub);}Bubble bub, bub2;for (i = 0; i < n - 1; i++) {bub = arrBubs.get(i);for (j = i + 1; j < n; j++) {bub2 = arrBubs.get(j);checkCollision(bub, bub2);}}}public static void updateWall() {iRight = clientWidth - D;iBottom = clientHeight - D;}public static void checkWalls(Bubble bub) {if (bub.x < 0) {bub.setX(0);bub.vx *= -1;} else if (bub.x > iRight) {bub.setX(iRight);bub.vx *= -1;}if (bub.y < 0) {bub.setY(0);bub.vy *= -1;} else if (bub.y > iBottom) {bub.setY(iBottom);bub.vy *= -1;}}static class Position {public double x;public double y;public Position(double x, double y) {this.x = x;this.y = y;}}public static Position rotate(double x, double y, double sin, double cos, boolean reverse) {if (reverse)return new Position((x * cos + y * sin), (y * cos - x * sin));elsereturn new Position((x * cos - y * sin), (y * cos + x * sin));}public static void checkCollision(Bubble bub0, Bubble bub1) {double dx = bub1.x - bub0.x;double dy = bub1.y - bub0.y;double dist = SQRT(dx * dx + dy * dy);if (dist < D) {// 计算角度和正余弦值double angle = Math.atan2(dy, dx);double sin = Math.sin(angle);double cos = Math.cos(angle);// 旋转 bub0 的位置Position pos0 = new Position(0, 0);// 旋转 bub1 的速度Position pos1 = rotate(dx, dy, sin, cos, true);// 旋转 bub0 的速度Position vel0 = rotate(bub0.vx, bub0.vy, sin, cos, true);// 旋转 bub1 的速度Position vel1 = rotate(bub1.vx, bub1.vy, sin, cos, true);// 碰撞的作用力double vxTotal = vel0.x - vel1.x;vel0.x = vel1.x;vel1.x = vxTotal + vel0.x;// 更新位置double absV = Math.abs(vel0.x) + Math.abs(vel1.x);double overlap = D - Math.abs(pos0.x - pos1.x);pos0.x += vel0.x / absV * overlap;pos1.x += vel1.x / absV * overlap;// 将位置旋转回来Position pos0F = rotate(pos0.x, pos0.y, sin, cos, false);Position pos1F = rotate(pos1.x, pos1.y, sin, cos, false);// 将位置调整为屏幕的实际位置bub1.setX(bub0.x + pos1F.x);bub1.setY(bub0.y + pos1F.y);bub0.setX(bub0.x + pos0F.x);bub0.setY(bub0.y + pos0F.y);// 将速度旋转回来Position vel0F = rotate(vel0.x, vel0.y, sin, cos, false);Position vel1F = rotate(vel1.x, vel1.y, sin, cos, false);bub0.vx = vel0F.x;bub0.vy = vel0F.y;bub1.vx = vel1F.x;bub1.vy = vel1F.y;}}}class Bubble {static int D = 222; // 泡泡直径double APLHA = 0.8;double[] POW = new double[] { 1.0, APLHA, APLHA * APLHA };double vx;double vy;double x;double y;double[] kOpa;double[] kStp;Image[] images = new Image[4];public Bubble() {double[] kOpa = new double[4];double[] kStp = new double[4];for (int i = 0; i < 4; i++) {// 泡泡顶层if (i == 3) {ImageIcon imageIcon = new ImageIcon(getClass().getResource("heart.png"));images[i] = imageIcon.getImage();} else {ImageIcon imageIcon = new ImageIcon(getClass().getResource("ch" + i + ".png"));images[i] = imageIcon.getImage();}kOpa[i] = 3 * Math.random();kStp[i] = 0.02 * Math.random();}this.kOpa = kOpa;this.kStp = kStp;}public void setX(double x) {this.x = x;}public void setY(double y) {this.y = y;}}
    

转载于:https://my.oschina.net/darkness/blog/802989

多彩泡泡屏保特效(JAVA版)相关推荐

  1. win10 SystemParametersInfo 设置屏保 不好使_黑科技学:抖音最近很火的时间罗盘屏保出电脑版了,实在太帅了...

    自古深情留不住,唯有套路存人心,大家好我是你们的黑科技老师木子李.今天小编想和大家分享一下最近很火的时间罗盘屏保,最近很多教程都是手机版,所以今天小编这出的是电脑版!动画效果那是相当的优秀.有什么需要 ...

  2. Java小程序动态雪花屏保

    ##Java动态雪花屏保 关于Java的一个项目代码,适用于代码小白参考: 界面框架代码: import javax.swing.JFrame; import com.sun.awt.AWTUtili ...

  3. 【JavaGUI demo】swing仿Windows气泡屏保动画(含源码)

    概述 java实现简单泡泡屏保动画及点击变实心泡泡,空格暂停动画 实现思路 采用MVC(Model-View-Controller(模型-视图-控制器))设计思路.将数据层与视图层与控制层分开. 在本 ...

  4. 电脑动态屏保_8款电脑软件,每一款都能让你的电脑更好用

    电脑已经成为我们办公必不可少的工具,每天我们都会有4-6个小时的时间在电脑上办公,但是你真的会用电脑吗?或者说你真的会高效的使用电脑吗? 接下来,看看这些好用的电脑软件,你都知道多少? 1.Bandi ...

  5. 联想绿色驱动,绿色时钟屏保Fliqlo,强力卸载工具HiBit Uninstaller 便携绿色版

    联想绿色驱动 联想绿色驱动2.7版,去除了后台服务与广告程序 下载地址: https://zhaooolee.cowtransfer.com/s/34189f7d89c143 绿色时钟屏保Fliqlo ...

  6. 红旗系统linux2.6.32屏保咋设置,红旗Linux桌面操作系统 V11社区预览版发布,附新特性介绍...

    红旗Linux桌面操作系统 V11(英文名称为RedFlag Linux Desktop 11)社区预览版发布了,根据计划,该版本将开放给用户下载试用.以下将介绍它的新特性:良好的硬件兼容.丰富的外设 ...

  7. win10神州网信政府版如何修改屏保

    一般的屏保修改以及屏保时间设置,想必大家都会,右键----个性化---锁屏界面---下边有个"屏幕保护程序设置",点击设置即可.但是对于win10神州网信政府版,由于其本身的安全设 ...

  8. Java彩球屏保的制作

    一.首先建立包ball,然后创建模板类BallModel BallModel类代码如下 : package ball;import java.awt.Color; import java.awt.Gr ...

  9. 学以致用——Java源码——使用随机几何图形制作屏保程序(Screen Saver with Shapes Using the Java 2D API)

    程序功能: 使用随机输出的几何图形作为屏保程序,用户可随时指定屏幕上要显示的图形元素的数量. 运行示例: 源码: 1. 实体类 import java.awt.Graphics; import jav ...

  10. Opengl 3D 屏保 圣诞版

    下载地址 ftp://mcu123:mcu123@61.235.117.43//upload_上传目录/3D屏保-xmas版.rar //切勿误用别人的FTP 效果图 下面是相框版 漂亮吧..   ~ ...

最新文章

  1. 怎么用python画个电脑_python语言还是java如何用python画爱心
  2. 祝全天下的教师,节日快乐!
  3. Ubunt php连接oracle,uBuntu PHP Oracle扩展 OCI8安装
  4. 从零入门 Serverless | Knative 带来的极致 Serverless 体验
  5. 周志华眼中的贝叶斯方法(转)
  6. 用代码,打造创意新世界!【Innovation 2021】网易应用创新开发者大赛正式开赛!
  7. TypeScript 2.1发布
  8. SPOJ - QTREE3Query on a tree again!——树链剖分
  9. 360 java插件设置_jdk环境变量一键设置 管理員运行
  10. 关于Resnet50和ResNeXt50的参数量的简单计算(只考虑卷积层和全连接层)
  11. Linux下selinux简单梳理
  12. java用this-gt;,java基础之十四-&gt;常用类
  13. FreeRTOS基础教程第一章创建任务
  14. 产品流程图的制作方法详解
  15. java过滤敏感词汇
  16. C语言之动态内存管理
  17. 【uniapp】微信小程序国际化详细版
  18. Android接入讯飞sdk使用,遇到的问题和解决
  19. Python定时获取外网IP地址并发送邮件
  20. docker使用文档1

热门文章

  1. mysql gtid 1236错误_错误1236
  2. python读取文件夹中的所有图片并将图片名逐行写入txt中
  3. 如何解决农村产权交易难的问题
  4. 数据分析方法——01描述性统计
  5. Xmarks浏览器书签同步的末日临近
  6. LCD显示屏和OLED显示屏的区别
  7. 惠普电脑如何安装双系统
  8. 推荐几款网页截图工具可以全屏截图,也可对图片编辑
  9. 无人车路径规划与控制综述
  10. 相机光学(五)——对运动物体的曝光时间的计算