C++使用getMessage在游戏循环中画面卡顿的现象

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一次便可以处理好全部的鼠标消息。原博客解释的更加详细,下面指路:

原博客见:

正确处理鼠标和按键消息(解决反应迟钝或消息丢失的问题) - CodeBus

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值