Java学习笔记(十)---线程动画

2018.7.25

其实线程动画咱们很早前就接触过了,只是你不知道那是基于线程动画实现的。比如咱们玩的弹跳球、坦克大战、飞机大战,都是基于线程来实现的。那么今天咱们就来用线程实现一个弹跳小球。

一、

根据上一篇博客,线程的使用及其简单,只需要把你要让线程干的事情写道run()方法里面,然后再用stat()方法启动它就好了。那么先来分析,画球其实就是画一个填充圆,不多说了,重要是如何让它看起来又移动的感觉?再往下一个位置画一个一模一样的填充圆呗,再把上一个位置的擦除,不停的画不停的擦,人眼有视觉暂留,只要这个过程够快,人眼看起来就是动的。ok小球移动的问题解决了。接下来是碰壁的判断(多个小球的时候它们之间的判断其实很简单,判断两个圆心的距离即可),碰壁判断的条件是看小球的球心坐标距离边界的距离和半径R的关系,这样子判断逼真一些,看上去就好像小球碰到了墙壁就反弹,而不是球心。所以碰壁的条件如下:x<=0 、x>=Width 、y<=0 、y>=Height,Width、Height是窗体的宽度和高度。那么碰壁之后如何反弹呢?改变速度的方向呗!就简单的speed*=-1,就转向了2333。物理问题解决了。

二、接下来分析的是代码问题。用线程去实现弹跳小球,一个小球就是一个线程,这样子资源有点浪费,所以我们不能采用一个线程控制一个小球。所以如何减少线程数呢?之前我们的思路是一个线程控制一个小球,但没说不准一个线程控制多个小球啊!所以采用下面这种方式:双线程,一个线程控制小球的生成,一个线程负责画出小球并移动。这样子用到的线程数就大大减少了。当然还有另一种方法,那就是单线程+重绘的办法,本人采用的是第二种。双线程那个暂时还没调好bug233。调好了再发布上来一起探讨学习。第二种方法就是利用重绘画出小球,用线程产生小球并控制小球的移动,产生的小球可以保存在队列数组里面,另外还可以控制一下小球生成的数量,这样就不会有很多小球在你的窗体上弹来弹去了。

三、不多说上代码:

小球界面类:

package 小球碰撞最终版;

import java.awt.Color;
import java.awt.Graphic
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值