阴天了一个上午,期待一场可以让我无比顺畅的雨~~~
Dark GDK程序在显示输出时,输出的内容实际是再窗口内容刷新后才发送到屏幕的。默认情况下,Dark GDK程序会尽快刷新黑框框。但是,执行任务繁重的代码可能干扰刷新速度。比如,执行一个死循环的时候,CPU就没有时间来刷新屏幕了~~~
下面介绍一组函数,用来接手系统的控制权控制刷新黑框框~~~
56.dbSyncOn()
void型,空参,作用:执行该函数后,由程序控制刷新黑框框,系统不会在自动刷新~~~
57.dbSyncRate(int)
void型,一个整形参数,表示黑框框一秒最大的刷新次数,作用:程序接管黑框框刷新后,由该函数指定刷新频率,频率越大,刷新越快,0是种特殊情况,参数为0表示尽快刷新,而不是每秒刷新0次~~~
58.LookGDK()
int型,空参,作用:控制循环每秒的执行次数,通过返回值告诉程序用户是否要终止程序,如果用户按Esc键或者关闭程序窗口,返回值为0,表示终止程序,否则返回非0值~~~一般用在while循环~~~
tips:LookGDK函数和dbSyncRate函数有连带关系,刷新频率和循环执行频率同步,具体情况下面会取一个例子解释~~~
59.dbSync()
void型,空参,作用:刷新黑框框~~~
60.dbSyncOff()
void型,空参,作用:重新开始自动刷新黑框框,也就是把主动权交还给系统~~~
学习了上面这一组函数以后,我们就可以写一些简单的游戏循环~~~
所谓游戏循环,就是在游戏和动画中使用的一种特殊循环,作用是同步屏幕刷新和程序的其他操作~~~
循环这玩样儿大家应该很熟悉,for,while,do…while大家也应该都用的炉火纯青,就不多做解释了~~~
先贴一段书上的代码:(注释我加的,有点2)
/*在黑框框上随机画点*/
#include"DarkGDK.h"
void DarkGDK()
{
const int MAX_X=dbScreenWidth(); /*用const关键字定义一个静态变量,其实就相当于一个宏了,只是两者的工作性质不 一样,dbScreenWidth函数用来获得黑框框的宽度*/
const int MAX_Y=dbScreenHeight();
int x,y; //定义两个整形变量,用作后面dbDot函数的参数
dbRandomize(dbTimer()); //为dbRND函数提供种子
dbSyncOn(); //从这步开始到while循环结束,就是一个游戏循环,dbSyncOn函数接管刷新
dbSyncRate(60); //设置刷新频率
while(LoopGDK()) /*当不按Esc或者不关闭窗口的时候,LoopGDK返回值为非0,非0的逻辑值即为真,循环会一直执行,相当于一个死循环,但是执行频率和dbScreenRate定的刷新频率一样*/
{
x=dbRND(MAX_X); //随机产生点的x坐标
y=dbRND(MAX_Y);//随机产生点得y坐标
dbDot(x,y); //画一个点
dbSync();//刷新屏幕,刷新之后画的点才 显示
}
}
游戏循环的框架:
dbSyncOn();
dbSyncON(x);//x表示自己设定的刷新频率,书上说范围在0~1000之间,0表示尽快刷新,但我试了2000,还是可以的
while(LoopGDK())
{
代码;
代码;
……
dbSync();
}
dbSyncOff函数没介绍,很少用到~~~
游戏循环就介绍完了~~~
靠,还是没下雨~~~