问题:Thread .Sleep(500)后你的线程睡了多久?
来源:互联网 发布:什么是非农数据 编辑:程序博客网 时间:2024/06/10 03:56
我们在J2ME中继承Canvas类的时候一般会再实现Runnable接口,实现多线程的效果个人认为实际上这边的线程不过是起到一个定时器的作用,完全可以用一个Timer或者用一个Inner class来实现这个的功能,在这里不对这个做过多的讨论。
我们的run()这个函数一般是实现这样的功能,定时的处理游戏逻辑gameLogic()和重画屏幕paint()。注意这里的定时是本文的重点,如果执行游戏逻辑和重画屏幕的间隔时间不为固定的话。一定破坏游戏性和游戏画面的真实性。
好了,我们看看一般的处理方法()
public void run() {
while (true) {
gameLogic();//处理游戏逻辑
repaint();//调用paint()重画屏幕
Thread.sleep(500);//线程sleep0.5秒
}
}
看上去好象是每次的间隔就是0.5秒。不过有没有想过如果一个复杂逻辑的游戏gameLogic(),和paint()实际上也是需要不少时间来处理的,而且对于一个复杂逻辑的游戏来说每次处理的时间长度都不相同,可能第一次gameLogic()+paint()的时间是0.1秒下一次又有可能是0.01秒。这样不就造成了间隔时间的不固定吗。所以我们必须把gameLogic(),和paint()的运算时间计算进去,就象下面那样。
public void run() {
time0 = System.currentTimeMillis();
while (true) {
time1 = System.currentTimeMillis();
timePassed = time1 - time0;
time0 = time1;
gameLogic();//处理游戏逻辑
repaint();
time1 = System.currentTimeMillis();
if (time1 - time0 < RUN_RATE) {
try {
Thread.sleep(RUN_RATE - (time1 - time0));
}
catch (InterruptedException e) {
}
}
}
}
- 问题:Thread .Sleep(500)后你的线程睡了多久?
- Thread.sleep()的一点问题
- 线程Thread Sleep(0)的意义重大
- java线程 Thread.sleep()的学习了解
- Java中的线程的休眠Thread.sleep()
- No4.线程中断+Thread.sleep()的用法
- 线程(Thread)Sleep
- 线程的优先级、Thread.yield()、Thread.sleep(5000)
- 毕业后,你折腾了多久做了多少努力才找到正确的方向或者道路?
- 如何看你的电脑开了多久了?
- java 线程Thread.Sleep详解
- java 线程Thread.Sleep详解
- java 线程Thread.Sleep详解
- java 线程Thread.Sleep详解
- java 线程Thread.Sleep详解
- java 线程Thread.Sleep详解
- 线程休眠示例Thread.sleep()
- 操作系统的线程管理机制以及Thread.Sleep()的作用
- 打造自由换色的png图片类 - 转
- CSDN 数据技巧
- PNG文件格式
- 工作两周年纪念文章提纲
- 网络基本命令
- 问题:Thread .Sleep(500)后你的线程睡了多久?
- 柳传志心中永远的痛
- State模式在J2ME游戏设计中的应用(需要源代码留下e-mail)
- [转帖]Oracle高手必读
- 曾经心痛变陌生
- 80/20原理(帕雷托法则)
- 白梅香 菖蒲花 谁是我最爱的人
- 半年上市
- 愚人节的幸福