游戏主循环:
#include<graphics.h>
int main()
{
initgraph(1280, 720);
while (true)
{
}
return 0;
}
peekmessage函数:如果成功拉取到了消息,函数就会返回true,反之就会返回false
使用另外一个循环来不断地从消息队列当中拉取已有的消息,并进行处理,直到消息队列当中没有消息为止
添加事件处理函数
#include<graphics.h>
int main()
{
initgraph(1280, 720);
while (true)
{
ExMessage msg;
while (peekmessage(&msg))
{
//在这里进行消息处理
}
}
return 0;
}
在msg变量当中保存有鼠标的x和y坐标
每次鼠标移动,我们就立刻绘制出圆的图案
怎么知道鼠标是否移动了?
添加判断:if(msg.message==WM_MOUSEMOVE)
圆怎么绘制?
使用solidcircle函数来绘图:
#include<graphics.h>
int main()
{
initgraph(1280, 720);
int x = 300;
int y = 300;
while (true)
{
ExMessage msg;
while (peekmessage(&msg))
{
//在这里进行消息处理
if (msg.message == WM_MOUSEMOVE)
{
x = msg.x;
y = msg.y;
}
}
solidcircle(x, y, 100);
}
return 0;
}
但是在绘制新的位置的圆的时候,没有对之前位置的圆进行擦除
简单起见我们在每次绘图之前都使用cleardevice函数来清空整个窗口
即:
cleardevice();
solidcircle(x, y, 100);
运行之后,发现绘制出来的圆一直在闪烁
这是因为我们没有使用双缓冲对绘图进行优化处理
解决方案:
在主循环前后分别添加BeginBatchDraw()和EndBatchDraw()
在绘图之后添加FlushBatchDraw()函数
完整代码:
#include<graphics.h>
int main()
{
initgraph(1280, 720);
int x = 300;
int y = 300;
BeginBatchDraw();
while (true)
{
ExMessage msg;
while (peekmessage(&msg))
{
//在这里进行消息处理
if (msg.message == WM_MOUSEMOVE)
{
x = msg.x;
y = msg.y;
}
}
cleardevice();
solidcircle(x, y, 100);
FlushBatchDraw();
}
EndBatchDraw();
return 0;
}
okok,今天的你就到此为止吧,明天还要接着🐺啊!!🎈🎈🧡