java实现游戏的循环及游戏帧数处理

引言:
      制作游戏对游戏的循环处理无疑是重要的,只有处理对游戏的循环,才不会出现游戏的卡顿现象。我们知道游戏中的动画是由一帧帧的静止的画面形成的,那么如果每一帧的画面因为机器处理的不同使得渲染时间不同,会使得游戏卡顿。一般的小游戏的FPS在60到100之间,FPS就是游戏画面的更新速率,代表每秒钟更新画面的次数,这里我们暂且取每一帧的更新时间为0.016秒,也就是FPS约为62。如果想要达到非常流畅的效果可以增大FPS,但切记最好不要使每一帧的时间小与其渲染时间(介绍完代码后就会理解是为什么了)。
      游戏更新的主循环代码和注释如下:
class MainThread implements Runnable{
    GameView Game=GameMainActivity.Game;//将游戏的主界面传入,GameView和GameMainActivity是自己定义的类

    @Override
    public void run() {
//这里是真正意义上的主循环,要记录时间
        //真正意义上的开始时间,0点
       //经过时间
        long update=0;//用于记录游戏渲染的时间
        long sleep=0;//用于记录游戏线程睡眠的时间
        while(true){//如果想要很好的中断游戏线程,可以把true变为自己规定的boolean变量,通过改变变量值中断游戏
            long before=System.nanoTime();//得到当前时间点,注意nanoTime()得到的是个时间点其数值并不是实际意义上的时间
            long t=sleep+update;//用于记录上一帧花费的时间

            Game.updateAndRender(t/1000f);//游戏界面的更新和渲染,该方法是自己在主界面中定义的
            update=(System.nanoTime()-before)/1000000L;//这里是计算渲染的总共时间 sleep=Math.max(2,16-update);//因为我们规定了每一帧的睡眠时间是
                                                         16毫秒,所以在2和渲染后还剩余的时间中取个最大值作为睡眠时间,设2是为了防止渲染时间太长
           try { Thread.sleep(sleep); } catch (InterruptedException e) { e.printStackTrace();

            } 

        } 

     }

  }
 
 
 
        以上便是游戏界面更新的主循环线程,之前说的FPS不要非常大是因为如果机器的性能不好,或界面需要渲染的东西很多会导致渲染时间比较长,这样每一帧更新的时间就不能很好的控制,就会导致游戏的卡顿。
      之所以像上面那样设置睡眠时间是为了保证在渲染时间在可控的范围内时,每一帧的更新时间一致这样游戏才会变的流畅。
      希望对大家有帮助。如果有写的不好的地方望指出。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值