`
李佳豪king
  • 浏览: 7462 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

用线程来让图动起来

    博客分类:
  • java
 
阅读更多
//两张图循环,
	public void draw(Graphics g){
		g.drawImage(i.getImage(), x, y, i.getImage().getWidth(null),
				i.getImage().getHeight(null), null);
		g.drawImage(i.getImage(), x+ i.getImage().getWidth(null), y, i.getImage().getWidth(null),
				i.getImage().getHeight(null), null);
	}
	public void move(){
			x-=5;
			if(x<- i.getImage().getWidth(null))x=0;
	}

 

	this.setVisible(true);
		//在主线程中统一画图
		while(true){
			g=drawjp.getGraphics();
			bufferedImage=new BufferedImage(drawjp.getWidth(),drawjp.getHeight(),
					BufferedImage.TYPE_INT_RGB);
			Graphics ggg=(Graphics2D)bufferedImage.getGraphics();//得到图片缓存的画布
			ggg.setColor(Color.WHITE);//将图片缓存的背景设为白色
			ggg.fillRect(0, 0,bufferedImage.getWidth(), bufferedImage.getHeight());
			
			try {
				Thread.sleep(1);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			for(int i=0;i<list.size();i++){
				Ball ball=list.get(i);
				ball.drawBall(ggg);
			}
			g.drawImage(bufferedImage, 0,0 ,drawjp.getWidth(),drawjp.getHeight(), null);
		}

 

//run方法类实现小球的移动
	public void run(){
		while (true){
			if(endflag)break;//结束线程
			try {
				Thread.sleep(30);
			} catch (Exception e2) {
				e2.printStackTrace();
			}
			if(stopflag)continue;
			move();
		}
	}

 

线程就像火影里面的忍者使用隐分身一样,它可以让计算机分身,做不同的事情,这些事可以跟主线程同时运行,所以用它来让我们画的东西动起来再合适不过了,这是一件神奇的事情 :D

 

首先我们创建一个画球的线程,在run方法里面写一个死循环,然后里面执行球移动(实际上就是改变球的坐标啦)的方法,画球的方法并不在这个线程里执行,而是在主线程里画,将启动的画球线程用队列存起来,然后在主线程里遍历所有线程的画球的方法,统一画在主线程里的缓存图上,然后这些图一每秒100次的速度画在面板上,这样动态图看起来就流畅多了,代码如上

 

还可以写一个画背景图的线程,在这个线程里面用一张首尾像似的图画两张循坏,让背景移动起来,在加一个走动的人,一幅动画图就粗来了,高大上的赶脚,哈哈

分享到:
评论

相关推荐

    java 多线程制作动画

    例如,如果两个线程需要交替进行(半径变化后圆心移动,或反之),可以使用wait()和notify()来实现线程间的协作。线程安全的数据结构,如Atomic类,也可以用来在多线程环境下共享和修改数据。 在控制半径大小的线程...

    基于VC++线程的动态数据曲线的绘制方法

    本方法的核心在于使用VC++中的线程技术和静态文本框控件来实现动态曲线的绘制。这种方法不仅能够提高数据展示的清晰度,还能增强用户的交互体验。 #### 工控系统结构 工控系统的结构设计需考虑数据采集、处理以及...

    使用线程动态遍历查找文件变化

    "使用线程动态遍历查找文件变化"这一主题,旨在教你如何通过编程技术实时监测文件或目录的变动,如新建、修改、删除等事件。这个过程通常涉及到多线程技术,以便在不影响主程序运行的情况下,实时获取文件系统的最新...

    多线程动态优先数调度

    为了实现动态优先级调度,开发者可能使用了`Thread.setPriority()`方法来改变线程的优先级,同时也可能使用了`Thread.yield()`来让当前线程自愿放弃CPU时间片,给其他线程机会。此外,`Thread.sleep()`可以用于让...

    7.线程管理动态_线程管理_

    “脱离线程”通常意味着让线程从执行中退出,这可能是因为线程完成了它的任务,或者因为某种错误条件需要终止线程。线程的退出状态和资源清理也是线程管理的重要部分,确保不会造成内存泄漏或其他问题。 “恢复线程...

    mfc 线程简单例子

    "Progress Control"在MFC中指的是进度条控件,通常用在用户界面中来显示任务的进度,给予用户反馈,让他们知道程序正在运行并估计完成时间。实现"Progress Control"更新,意味着在线程中动态地改变进度条的状态,以...

    让任务栏图标动起来

    标题“让任务栏图标动起来”暗示我们...总的来说,实现“让任务栏图标动起来”涉及到编程技巧、操作系统API的使用、性能优化以及问题排查。当遇到程序无响应时,需要从代码、资源管理和错误处理等方面进行全面检查。

    DevExpress的GridView动态绑定数据集,多线程动态修改UI自动刷新

    在C#中,你可以使用`BindingSource`对象作为数据中介,将数据源(如DataSet或DataTable)与GridView关联起来。例如: ```csharp DataSet dataSet = new DataSet(); // 加载数据到dataSet... BindingSource binding...

    学线程自制时钟

    通常,我们会让时钟线程短暂休眠,然后再次唤醒以更新时间。这可以通过调用Thread.sleep()方法来实现,参数表示的是毫秒级的睡眠时间。合理的睡眠时间能使时钟看起来更加平滑,不会出现跳帧现象。 在"clock"这个...

    Java多线程实例图形版

    总结起来,"Java多线程实例图形版"是一个结合理论与实践的教学资源,通过“哲学家就餐问题”这一经典案例,帮助开发者理解多线程的基本概念、并发问题以及解决策略。通过学习这个实例,不仅可以掌握Java多线程编程的...

    易语言创建类线程

    类线程则是将线程与特定的类对象关联起来,这样线程就可以直接操作该类的对象,执行类中的方法。 "GetThis"是一个关键的函数,它用于获取当前运行线程的对象引用。在类线程中,由于多线程环境下可能存在多个线程...

    用多线程方法实现在MFC中调用控制OpenGL绘图

    总结起来,"用多线程方法实现在MFC中调用控制OpenGL绘图"涉及到的知识点包括:MFC编程基础、OpenGL绘图原理、多线程编程、GLUT库的使用、线程间通信和同步、以及Windows消息机制。掌握这些技能,开发者就能创建出...

    运用多线程编程球体游戏

    他们可能会使用定时器或事件驱动机制(如回调函数)来定期更新每个线程的状态,改变小球的位置,使得小球看起来在屏幕上移动。 此外,考虑到多线程环境下可能出现的同步问题,开发者需要使用同步机制来确保线程安全...

    多线程操作实例源码

    多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。浏览器就是一个很好的多线程的例子,在浏览器中你可以...

    多线程操作实例源码,,

    线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题 线程太多会导致控制太复杂,最终可能造成很多Bug  基于以上认识,我们可以一个比喻来加深理解。假设有一个公司,公司里有很多各司其职的职员,...

    WPF下,高性能绘图,写WriteableBitmap,多线程,双缓存

    总结起来,这个项目展示了如何在WPF环境下利用WriteableBitmap、多线程和双缓存策略来提升图形性能,这对于开发高效、流畅的WPF应用,尤其是涉及大量绘图和实时更新的应用来说,是非常有价值的参考。通过深入研究和...

    基于OpenMP多线程动态负载均衡技术研究.pdf

    将MPI和OpenMP结合起来使用的混合并行编程模式,可以同时利用共享内存和分布式内存的优势,从而在更大规模的并行计算环境中实现负载均衡。 文档最后提到的Ranjit Noronha和Dhabaleswar K Panda的研究,是关于在多核...

    多线程通信读写文件

    在多线程环境中,这通常涉及到使用try-finally语句或使用with语句来自动管理资源。 总结起来,多线程通信读写文件是提高程序效率的关键技术,但同时也需要妥善处理线程安全问题。通过选择合适的同步机制,合理调度...

    python多线程图片自动识别代码

    在这个场景下,我们使用Python来实现一个能够自动识别图片内容的系统,同时优化进度条显示和数据导出到Excel的功能。 首先,我们要了解**Python的多线程(Multi-threading)**。在Python中,`threading`模块提供了...

Global site tag (gtag.js) - Google Analytics