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

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

线程的创建有两种方式,分别为继承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();//启动线程

}};

}

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

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

线程动画屏保小球碰撞c语言,线程小动画之屏保--模仿小球碰撞反弹(一)相关推荐

  1. 电脑屏保在哪里设置_超火的时钟屏保,有点个性!

    嗨,我是XX酱, 最近有个电脑的罗盘时钟屏保火了,个人感觉还可以: 所以XX酱也给你打包带来了工具及设置教程,喜欢的不妨去设置一下: 请戳视频,观看效果及设置教程: 在公众号对话框发送:屏保,即可获取 ...

  2. c语言Linux用线程创建文件,Linux环境下C语言线程创建---简单代码

    在Linux环境下用C语言编写线程创建. //file name: pthreadtext.c #include #include //线程头文件 //pthread不是linux下的默认的库,也就是 ...

  3. java做windows屏保_java编程加载窗口,制作动画(屏保泡泡)

    1.整体的结构图: 2.编写GameFrame02.java代码: package cn.bjsxt.test; import java.awt.Frame; import java.awt.Grap ...

  4. 3D屏保JAVA代码_java编程加载窗口,制作动画(屏保泡泡)

    1.整体的结构图: 2.编写GameFrame02.java代码: package cn.bjsxt.test; import java.awt.Frame; import java.awt.Grap ...

  5. java编程加载窗口,制作动画(屏保泡泡)

    1.整体的结构图: 2.编写GameFrame02.java代码: package cn.bjsxt.test;import java.awt.Frame; import java.awt.Graph ...

  6. w7计算机屏幕保护设置方法,W7屏保怎么设置

    w7屏保怎么设置?w7电脑系统中的屏幕保护程序一般是从桌面右键进入的,但很多用户使用的是w7家庭版电脑系统,右键没有个性化设置,这种情况只能从控制面板中进入,至于如何设置屏幕保护,相信用户进入之后就懂 ...

  7. Linux下的屏保设置 xset s 与 xset dpms

    Linux下的屏保设置 xset s 与 xset dpms http://bbs.chinaunix.net/archiver/?tid-2112889.html 用xset q 可以查看当前屏保的 ...

  8. 电脑所有程序里有不一样颜色_12个好玩的电脑屏保,让你成为别人眼中最靓的仔。...

    Hello 大家好,这里是工具狂人.作为一个靠打字(哦不,搬砖)为生的新媒体小编,每天多数时候都是对着电脑屏幕,中途有时会拿起手机回复消息.查看短信.刷起微博.刷手机的时间一长,眼前的电脑会自动打开系 ...

  9. 组策略设置屏保的方法

    组策略设置屏保.域环境是2003,客户端是XP,单独创建一条策略仅配置屏幕保护设置,屏保之后会提示用户输入密码,这是所需要的.客户创建了策略并定义了很多的设置,在这条策略里再设置关于屏幕保护的设置,屏 ...

  10. linux命令行自制屏保,Linux终端界面屏保

    在很多Linux使用者的认知里,都认为终端下的Linux操作界面是没有屏保的,只有像windows那样的图形界面下才有屏保.但是其实Linux下也是有屏保的,只不过是ASCII 屏保.下面就来给大家介 ...

最新文章

  1. excel增加上一列的数值(日期)
  2. 马尔可夫模型与条件随机场模型
  3. 用 php写的条件语句-三种条件语句
  4. Machine Learning Yearning book draft - 读记(前14章)
  5. 九度oj 题目1537:买卖股票
  6. [机器学习]超参数优化算法-SuccessiveHalving与Hyperband
  7. 开发中用到过的技术链接
  8. react的事件机制
  9. Win7系统主题路径
  10. Hasura GraphQL 内部表结构
  11. Atitit 微服务之道 attilax著 1. 什么是微服务架构? 1 1.1. 、微服务与SOA的关系 :微服务架架构师面向服务架构(SOA)的一种特定实现 2 1.2. 微服务与康威定律 2 1
  12. GIF工具大全(网站)
  13. 我不生产代码,只是代码的搬运工!超级多的 —— 第三方
  14. 201903-1小中大
  15. Word最常用的100个通用快捷键
  16. flash AS3常用公式
  17. IT项目验收规范参考
  18. 【机器学习】决策树实验报告
  19. Window10 和 Ubuntu20.04 双系统安装
  20. 手把手教你刷github提交记录

热门文章

  1. 通讯录系统课程设计——链表实现——c语言
  2. 如何在VirtualBox中安装win7虚拟机?
  3. vsftpd 安装及简单配置
  4. COMSOL有限元仿真深度指南:构建与管理自定义材料库
  5. vue3快速上手(尚硅谷视频笔记)
  6. MapGis二次开发环境部署
  7. RDkit:介绍smiles编码,smart编码及摩根指纹(ECFP)
  8. 自动化睡眠分期工具:开源、免费、高效
  9. jrtplib 编译安装配置
  10. 基于单片机智能药盒控制系统设计(含论文)