`
海王子1994
  • 浏览: 45401 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

线程小动画之屏保--模仿小球碰撞反弹(一)

 
阅读更多

       相信大家都对屏幕保护中的小球碰撞动画深有印象吧,许多色彩缤纷的小球在屏幕上滚动,碰撞,然后一直重复如此过程......现在就让我们自己尝试去做一下吧,或许你做的比它的要更好呦!

       不必说,最重要也是最先弄的,自然是要产生小球啦,因此就要先创建一个球的线程类。这里先放上一些关于线程创建的知识,有助于大家巩固记忆啦。

 

线程的创建有两种方式,分别为继承Thread类(已经实现了Runnable接口)与实现Runnable接口。

1.Thread类

常用方法包括:start()、interrupt()、join()、run()方法等。start()方法用于启动线程,run()方法为线程实现功能的方法,可以根据需求覆写run()方法。

构造函数8个,常用4个:

Thread thread=new Thread();                                  //无参的Thread类构造函数
Thread thread=new Thread(Runnable simple);                   //参数为实现Runnable接口类对象的构造函数
Thread thread=new Thread("ThreadName");                      //参数为线程名称的构造函数
Thread thread=new Thread(Runnable simple,"ThreadName");      //无参的Thread类构造函数

2.Runnable接口

它只有一个方法就是run()方法,实现Runnable()接口后必须覆写run()方法。

嗯,如上所说,先创建一个球的线程类:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.Random;

import javax.swing.JPanel;


public class MyThread extends Thread{

	private JPanel panel;
	private int x,y;//坐标位置
	private int radius=50;//球半径
	private int vx,vy;//横纵坐标该变量
	private Color color;
	
	public MyThread(JPanel panel)
	{
		this.panel=panel;		
		Random random=new Random();//创建一个随机类变量
		vx=random.nextInt(20)+10;
		vy=random.nextInt(10)+5;
		radius=random.nextInt(10)+20;
		color=new Color(random.nextInt(256),random.nextInt(256),random.nextInt(256));
	}
	
	//重写run的方法
	public void run()
	{
		Random random=new Random();
		
		//Graphics g=panel.getGraphics();//获得窗体界面
		Graphics2D g2=(Graphics2D)panel.getGraphics();
		
		panel.setBackground(Color.BLACK);
		while(true)
		{
			try{
				Thread.sleep(100);//调用线程睡眠方法,让线程能暂缓进行
			}catch(InterruptedException e ){
				e.printStackTrace();
			}
			
			//覆盖小球先前的轨迹
			g2.setColor(panel.getBackground());//获得窗体背景颜色
			g2.fillOval(x, y, 2*radius, 2*radius);
					
			x+=vx;
			y+=vy;
			
			g2.setColor(color);
			g2.fillOval(x, y, 2*radius, 2*radius);
			
			
		    
			
			//若小球碰撞到面板边缘,则反弹
			if(x<0||x>panel.getWidth()-2*radius)
			{
				vx=-vx;
			}
			if(y<0||y>panel.getHeight()-2*radius)
			{
				vy=-vy;
			}
		}
	}
}

 这里大概要注意两点吧:

 

1.要覆盖小球先前的轨迹,不然所有时刻的轨迹都会显现在窗体上。

2.考虑小球出界时的情况,设定反弹条件

 

之后当然就是写一个测试类

 

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class TestFrame {

	private JPanel centerpanel;
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        TestFrame tf=new TestFrame();
        tf.init();
	}
	//初始化界面的方法
   public void init()
   {
	   JFrame jf=new JFrame("线程入门");
	   jf.setSize(800, 600);
	   jf.setDefaultCloseOperation(3);
	   jf.setResizable(false);
	   
	   JPanel northpanel=new JPanel();
	   northpanel.setSize(800, 200);
	   
	   JButton jbu=new JButton("开始");
	   //jbu.setPreferredSize(new Dimension(50,50));
	   jbu.addActionListener(al);
	   northpanel.add(jbu);
	   
	   jf.add(northpanel,BorderLayout.NORTH);
	   
	   centerpanel=new JPanel();
	   jf.add(centerpanel,BorderLayout.CENTER);
	   
	   jf.setVisible(true);
   }
   ActionListener al=new ActionListener(){

	@Override
	public void actionPerformed(ActionEvent e) {
		
		MyThread thread=new MyThread(centerpanel);//创建一个线程
		thread.start();//启动线程
	}};
}

 

 

提醒下的是,最好创建两个面板,北边面板放按钮,中间面板当画布,这里小球运动时就不会影响到按钮的轮廓。

 

这样操作完后,就能产生许许多多的小球啦。



 

 

 

 

 

  • 大小: 17.1 KB
1
2
分享到:
评论

相关推荐

    多线程之小球碰撞

    标题“多线程之小球碰撞”涉及到的是计算机编程中的多线程技术,结合描述中的博文链接,我们可以推测这篇文章可能是通过一个模拟小球碰撞的示例来讲解多线程编程的概念和实践。在这个场景中,每个小球可以代表一个...

    JAVA运用多线程实现碰撞的小球

    通过JAVA运用多线程控制球的运动,通过窗口中的滑条,对球的大小和颜色进行选择后,随机从窗口左右两方择一进入,小球在遇到障碍或边界后会折回。

    Java 第二阶段提升编程能力【线程(基础)】---- 代码

    Java 第二阶段提升编程能力【线程(基础)】---- 代码 Java 第二阶段提升编程能力【线程(基础)】---- 代码 Java 第二阶段提升编程能力【线程(基础)】---- 代码 Java 第二阶段提升编程能力【线程(基础)】---- ...

    JAVA多线程实验,字符移动、小球碰撞

    在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应性。本实验通过“字符移动”和“小球碰撞”两个实例,深入浅出地展示了Java多线程的概念、创建与管理。 首先...

    多线程 小球 运行程序(eclipse工程可导入)

    标题中的“多线程 小球 运行程序(eclipse工程可导入)”表明这是一个与多线程编程相关的项目,可能是用Java语言实现的,因为Eclipse是Java开发的常用集成开发环境。这个程序可能设计了一个模拟小球运动的场景,通过多...

    Android中利用Handler在子线程中更新界面--简单的小球上下跳动案例

    当用户点击一个按钮时如果执行的是一个常耗时操作的话,处理不好会导致系统假死,用户体验很差,而Android则更进一步,如果任意一个Acitivity没有响应5秒钟以上就会被强制关闭,因此我们需要另外起动一个线程来处理...

    java多线程控制小球程序

    在“java多线程控制小球程序”这个项目中,我们看到一个具体的应用场景:多个小球在一个框内不断弹跳,并且这些小球可能在不同的时间发射。这样的设计可以模拟现实世界的物理现象,例如弹珠台或者粒子碰撞,同时也是...

    Java编写小球线程动画

    线程化小球动画的目的是让每个小球在屏幕上独立运动,互不干扰,从而实现流畅的动画效果。 要实现小球线程动画,我们需要以下关键步骤: 1. **创建小球类**:首先,定义一个表示小球的类,包含小球的位置、速度、...

    多个小球的碰撞

    标题“多个小球的碰撞”涉及的是一个计算机编程问题,主要使用Java语言来实现。这个题目可能是指在二维空间中模拟多个小球的物理碰撞,其中小球的运动不受用户控制,但可以通过调整代码中的参数(例如在manyballs类...

    JAVA线程、线程池资料----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    .......................................JAVA线程、线程池资料----下载不扣分,回帖加1分,欢迎下载,童叟无欺JAVA线程、线程池资料----下载不扣分,回帖加1分,欢迎下载,童叟无欺JAVA线程、线程池资料----下载不...

    小球线程动画 .java

    java 线程 动画

    VC++课程设计之小球碰撞演示

    在本篇中,我们将深入探讨"VC++课程设计之小球碰撞演示"这一主题,它涉及到计算机编程、图形渲染以及物理模拟等多个领域的知识。在这个项目中,学生利用Microsoft的Visual C++(VC++)集成开发环境,特别是MFC...

    一个线程捕获另外一个线程的异常1---马克-to-win java视频

    一个线程捕获另外一个线程的异常1---马克-to-win java视频

    Java多线程与线程安全实践-基于Http协议的断点续传

    Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多...

    vc++ multithread多线程教程---线程通信--利用事件对象,线程同步--使用信号量,线程同步--使用互斥量,线程同步--使用临界区

    临界区是最简单的线程同步机制,它保护一小段代码,确保在任何时刻只有一个线程能执行这段代码。使用EnterCriticalSection和LeaveCriticalSection函数,开发者可以将需要同步的代码区域定义为临界区。临界区适用于在...

    JAVA多线程与线程安全实践-基于Http协议的断点续传.rar

    JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多...

    Java多线程与线程安全编程实践-基于Http协议的断点续传.zip

    Java多线程与线程安全编程实践-基于Http协议的断点续传.zip Java多线程与线程安全编程实践-基于Http协议的断点续传.zip Java多线程与线程安全编程实践-基于Http协议的断点续传.zip ...Java多线程与线程

    Java多线程与线程安全实践-基于Http协议的断点续传.zip

    Java多线程与线程安全实践-基于Http协议的断点续传Java多线程与线程安全实践-基于Http协议的断点续传Java多线程与线程安全实践-基于Http协议的断点续传Java多线程与线程安全实践-基于Http协议的断点续传Java多线程与...

Global site tag (gtag.js) - Google Analytics