getMessage()函数在先前用于关卡选择时,没有任何问题;
但在关卡中进行游戏中,只要添加了m.getMessage()函数,莫名其妙出现了画面的卡顿。
while(true){
//游戏大循环
m=getMessage(EX_MOUSE);
if(m.lbutton){
if(m的坐标在指定范围内){
调用对应函数;
}
}
}
对比函数之后,发现差别仅在于,后者使用了双缓冲函数及sleep()函数调整画面帧率,参考了其他的博客后进行了如下更改:
ExMessage m;
// 游戏的主循环
while(true)
{
while (peekmessage(&msg, EX_MOUSE)) // 如果获取到了消息就执行
{
if(m.lbutton) //这里也可以使用switch(m.message)
if(m坐标在指定范围){
执行对应语句
}
else
其他情况;
}
绘制游戏内容();
Sleep(xx); // 延时,降低 CPU 占用率
}
修改后,即可成功运行。主要原因个人因为是由于sleep造成了程序暂停运行了一段时间,此时缓冲区内仍在存入鼠标消息,其中大量的是关于鼠标坐标的消息,少量可能是点击,而若使用if语句,在一次while游戏大循环中只能处理一个鼠标消息,造成缓冲区溢出;用while一次便可以处理好全部的鼠标消息。原博客解释的更加详细,下面指路:
原博客见: