java 小球 怎么定义_java简单线程小球的实现

大家都知道,当你需要用代码执行多任务时,线程的使用显得必不可少。所以,今天咱们来谈谈java中线程的使用。

以线程小球的移动为例:当我们要实现一个小球的移动时,不用线程也可以实现,首先用重绘的paint方法,在里面利用一个简单的循环,再设置每个循环之间的间隔时间,就能实现一个小球的移动。但是,这是我们会发现,你启动线程小球开始的那个按钮会变为按下的状态,即为不可按的状态。为什么会这样呢,其实是因为在没有开启线程状态下,系统只有完成了指定的任务后才能操作来进行下个任务,这样就很不方便,所以我们采用线程。

首先我们先来了解下线程的使用方法,第一种是实现Runnable接口:

public class Runball implements Runnable {

}

第二种是继承Thread的方法

class MyThread extends Thread{

}

调用线程的时候只需要实例化Thread对线,在调用里面的start方法即可。

小球的基本移动已实现,现在讲讲小球的碰撞界面边缘后的反弹,首先我们可以给小球定义4个基本属性,小球的位置x,y以及小球的2个方向的移动速度vx,vy.只需要加上一个判断,以水平方向的壁为例,vy不变,至于要令vx反向即可。

x=x+vx;

if(x<0||x+size>800){

vx = -vx;

}

接着就是小球的添加,我们需要实现只要点击按钮小球即可被创建。我们可以将小球看成一个类,在这个类中定义小球的各种属性,把这个类存到一个数组中,点击按钮后从数组中把它取出即可。这里我用到了以前写过的数组队列的方法。以下三部分代码分别是:1.创建一个balllist数组。2.循环取出balllist数组中的对象。3.实例化Ball对象并调用balllist里的add方法。使用数组队列的好处是不用担心数组越界的问题。

private MyarrayList balllist =new MyarrayList();

for(int i=0;i

Ball ball=balllist.get(i);

ball.draw(g);

}

Ball ball=new Ball(this);

balllist.add(ball);

创建出多个小球后,我们会发现有很多小球会和另一个小球重叠地穿透过去,这根本不符合物理规律嘛,所以我们再加上小球之间的碰撞,这里我们没有特别严谨的分析。。。只是简单地把所有的碰撞都看成两个方向完全相反的小球的碰撞,这样只需要判断两小球球心间的距离与两小球半径和的大小关系,碰撞后使两小球速度变为另一个小球的速度即可。

最后就是小球的定时任务,即我们按下一个按钮后会每隔一段时间自动创建一个小球。这里我使用的方法是重新创建一个线程,在这个线程中用到上述方法中的创建小球的方法,并且有1000ms的休眠时间,这样就能简单地实现这个功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值