计算到了碰撞,这很像是一个JAVAME的游戏啊~~
collisions()
表示定义了一个碰撞的方法,在里面分别调用了边界、球洞和球的碰撞方法;
calculateNext(long millis)
从名字来看,应该是计算球的下一毫秒的位置,double segs = millis / 10000; 是表示根据时间来计算的位置的单位,millis应该是毫秒
nextX[i] = x[i] + vx[i] segs;
nextY[i] = y[i] + vy[i] segs;
这两句应该就是计算球的位置的偏移量的;
if (Mathabs(Mathhypot(vx[i], vy[i]))<2) {
vx[i] = 0;
vy[i] = 0;
}
Mathabs(Mathhypot(vx[i], vy[i]))是计算球的移动距离的,至于两个Math方法的作用你可以去查API,学java的一定要懂得利用API
holesCollision()
这个方法就是判断球进洞的方法,
for (int iHX=0; iHX<3; ++iHX) {
for (int iHY=0; iHY<2; ++iHY) {
应该是球台上的6个洞的坐标,然后判断如果球的坐标与洞的坐标相等了,就表示球与洞碰撞了,即球进洞了
以上皆为推测,因为只看到这小部分代码,可能部分不准确的
1、所谓“暂停”,就是程序暂等待。
2、在java中暂停,有几种方法,如线程wait或是sleep或是yield等,自己百度查一下这些方法的用法,就可以解决你的问题了~
试试吧
你说的应该不是sleep吧。呵呵,
这么简单的话,就没必要在这里问了。
我猜测呢,你是要在多线程计时任务
Task线程里面有个while循环?
那么你需要一个TimerTask 来控制这个线程,也就是计时线程。
那么这个计时线程,有两种方法~
第一种,比较不讲究的方法,也就是,对结果处理不好的方式,类似于过时方法的stop,就是把你的Task线程在TimerTask里面启动。
TimerTask里面类似于
while(true){
Taskstart();
Date date = new Date();
while(true){
计算时间差,如果时间差大于超时时间,则break
}
}
而在Task线程中,需要加上一行代码
thissetDeamon(true);
将这个task任务设置成后台线程。
因为是TimerTask启动的这个后台任务线程, 一旦超时,那么,这个后台线程Task将会被强制shutdown 。
这种方式适用于不怎么严格的线程要求。
还有一种呢,就是比较严格,对后台处理要求很高的那种。
就是两个线程中需要有共享的变量,将结果,运行状态,都要共享,当TimerTask发现超时的时候,会判断Task线程的处理结果。以及运行状态,而做出相应的处理。
你问的问题比较宽泛。所以,我只能大致的把思路给介绍一下。
如果,能牵扯到实际的问题,那样就容易判断用那种方式的线程超时机制比较好了。呵呵
最后,节日愉快~~
如果你是在Linux, ps -ef | grep java 拿到pid, 再 kill -9 pid
如果你是在windows, 直接打开任务管理器, 打到Java进程,停止它
以上就是关于能解释一下这个java桌球程序吗全部的内容,包括:能解释一下这个java桌球程序吗、java中如何实现暂停程序,单击按钮继续、java 多线程如何让程序运行一定时间后停止等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)