环境:
编辑器:VS2015
系统:win10 专业版
碰撞:aabb obb盒模型(obb采用分离轴进行判断)
渲染:direct2d
相关观念说明:
最优频率:渲染场景的时候上一帧和当前帧的时间间隔和显示器的上一帧和当前帧的时间间隔一样那么这就是一个最优的间隔一秒钟内能绘制多少次我们就叫这个为频率(要想完成一个流畅的游戏最优帧是不可少的)
计时器:能够周期执行某一方法的一种对象
fps:每秒中填充图像的帧数(帧/秒)
封装思路:
方法说明:
一个启动计时器的方法(start)
一个停止计时器的方法(stop)
一个设置计时器执行周期的方法(setTimmer)
一个新增每一个周期执行函数的方法(addFun)
一个每一次最优帧执行的方法(render)
属性说明:
一个储存当前计时器fps的属性(fps)
一个储存当前计时器执行时间间隔的属性(timmer)
一个储存当前计时器当前最优频率的时间间隔(msTime)
一个储存了上一次执行方法的时间的属性(oldTimmer)
一个当前帧的当前时间的属性(newTimmer)
计时器的id(id)
一个储存计时器是否启动的属性(started)
一个储存计时器到期了要执行的方法数组(tickerArr)
调用流程:
我们再窗口循环(窗口循环间隔为最优间隔通过微软的begindraw和enddraw之间)里面调用demoapp对象的render
render方法周期调用了当前demoapp对象的场景对象的render然后在场景对象(action.h)里面调用了场景对象(action.h)拥有的计时器(ticker.h)的render方法
下面看主要代码:
启动计时器的方法:ticker.cpp
我们将计时器对象的started设置为true然后再render里面进行判断
关闭计时器的方法:ticker.cpp
设置计时器时间间隔的方法:ticker.cpp
我们将计时器对象的时间间隔设置为传入的值然后在计时器对象的render方法里面进行判断调用
计时器的render:ticker.cpp
这里我们先判断计时器是否是启动的如果不是我们直接返回
然后将当前时间间隔加上最优帧间隔
然后将当前间隔赋值到我们的计时器对象上
如果当前帧的时间间隔(newTimmer)大于了我们的timmer我们就调用一个周期需要调用的函数方法并将app对象和当前的计时器对象传出去
然后我们对fps进行赋值因为我们的render方法已经是最优帧执行了所以只需要在fpsTimmer大于1000的时候将fps修改为fpsInt的值就算是记录了一次fps的值了
这是我们要做的目标:
项目开源地址:
https://github.com/yinhui1129754/fishing
游戏开发交流群:
859055710