• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

问题:Thread .Sleep(500)后你的线程睡

servlet/jsp 搞代码 7年前 (2018-06-18) 160次浏览 已收录 0个评论

我们在J2ME中继承Canvas类的时候一般会再实现Runnable接口,实现多线程的效果个人认为实际上这边的线程不过是起到一个定时器的作用,完全可以用一个Timer或者用一个Inner class来实现这个的功能,在这里不对这个做过多的讨论。

我们的run()这个函数一般是实现这样的功能,定时的处理游戏逻辑gameLogic()和重画屏幕paint()。注意这里的定时是本文的重点,如果执行游戏逻辑和重画屏幕的间隔时间不为固定的话。一定破坏游戏性和游戏画面的真实性。

好了,我们看看一般的处理方法()

http://www.gaodaima.com/40501.html问题:Thread .Sleep(500)后你的线程睡

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)后你的线程睡》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:问题:Thread .Sleep(500)后你的线程睡

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址