11 绘制雪花动态图
来源:互联网 发布:wifi信号搜索软件 编辑:程序博客网 时间:2024/05/16 13:49
前言
无
问题描述
接下来介绍一个好玩的, 绘制雪花的动态图
给定雪花的运动中的几张图片, 将其绘制到JPanel, 并动态的顺序的绘制各个图片, 形成一种 动画的即视感
思路
思路 : 使用一个线程定时的更新该位置的图片的索引, 定时重新绘制
参考代码
/** * file name : Test03DrawSnowFlake.java * created at : 10:21:16 AM Jun 13, 2015 * created by 970655147 */package com.hx.test06;public class Test03DrawSnowFlake { // 雪花素材, 图片的个数 static Image SNOW_FLAKES[]; static int SNOW_FLAKE_NUM = 4; static { try { SNOW_FLAKES = new Image[SNOW_FLAKE_NUM]; for(int i=0; i<SNOW_FLAKE_NUM; i++) { SNOW_FLAKES[i] = ImageIO.read(new File("src/images/Test03DrawSnowFlake_snowFlake" + i + ".png")); } } catch (IOException e) { e.printStackTrace(); } } // 绘制雪花 public static void main(String []args) { // 各个雪花的初始状态, 位置, 大小 int[] idxes = new int[] {0, 2, 3, 1 }; Point[] poses = new Point[] { new Point(20, 20), new Point(100, 100), new Point(200, 20), new Point(200, 200) }; Dimension[] dimenes = new Dimension[] { new Dimension(40, 40), new Dimension(40, 40), new Dimension(20, 20), new Dimension(20, 20) }; // 创建窗口, 绘制雪花, 启动更新雪花状态的线程 JFrame frame = new JFrame(); MyPanel panel = new MyPanel(idxes, poses, dimenes); frame.add(panel); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(100, 100, 400, 300); frame.setResizable(false); new Thread(new MyRunnable(panel)).start(); } // Panel 用于显示雪花 static class MyPanel extends JPanel { // 雪花的图片, 索引, 位置 int[] idxes; Point[] poses; Dimension[] dimenes; // 初始化 public MyPanel(int[] idx, Point[] poses, Dimension[] dimenes) { super(); if((idx.length != poses.length) || (poses.length != dimenes.length) ) { throw new RuntimeException("idx'sLength must equals with poses'sLength & dimenes'sLength !"); } this.idxes = idx; this.poses = poses; this.dimenes = dimenes; } // @Override, 绘制雪花 public void paint(Graphics g) { super.paint(g); g.setColor(Color.white); g.fillRect(0, 0, 400, 300); drawSnowFlake(g); } // 绘制num private void drawSnowFlake(Graphics g) { for(int i=0; i<idxes.length; i++) { g.drawImage(SNOW_FLAKES[idxes[i]], poses[i].x, poses[i].y, dimenes[i].width, dimenes[i].height, null); } } // 切换雪花的状态 public void switchSnowFlake() { for(int i=0; i<idxes.length; i++ ) { idxes[i] = (idxes[i] + 1) % SNOW_FLAKE_NUM; } repaint(); } } // 切换图片的周期 static int changeInterval = 100; // 切换panel中的雪花状态的线程 static class MyRunnable implements Runnable { MyPanel panel ; // 初始化 public MyRunnable(MyPanel panel) { super(); this.panel = panel; } // @Override, 切换雪花的状态 public void run() { while(true) { panel.switchSnowFlake(); Tools.sleep(changeInterval); } } }}
效果截图
总结
瞎扯淡, 写着玩, 没什么技术含量。。
注 : 因为作者的水平有限,必然可能出现一些bug, 所以请大家指出!
0 0
- 11 绘制雪花动态图
- 雪花系统的绘制
- jschart 绘制动态图
- 雪花飘落的动态效果
- 动态调试之雪花直播
- IOSdrawRect绘制雪花飘落的效果
- Unity&Shader案例篇—绘制雪花
- 雪花
- 雪花
- 雪花
- 雪花
- 雪花
- 雪花
- 雪花
- C#绘制动态折线图
- echarts动态绘制折线图
- 使用matplotlib绘制动态图
- python绘制动态模拟图
- 程序员生涯上第一篇文章~~~
- binder.registerCustomEditor 方法的示例:springmvc之 特殊字段的注入
- 时间复杂度的计算<一>
- How can I limit the CPU load and bandwidth when make a video call?
- 在线学习好去处 在线终端 在线IDE
- 11 绘制雪花动态图
- Volley框架之使用GET或POST将cookie传给服务器
- UIAlertController的使用——创建提示窗口
- 一小段代码看内存
- jQuery Ajax 简单的实现跨域请求
- 如何制作一款像超级玛丽兄弟一样基于平台的游戏
- 机器学习与深度学习资料
- HOJ 1444 Humble Numbers
- Delphi 调试