在之前的博文中《用Devc++与easyx一步一步做游戏[启动界面部分]-之按钮制作》,我们利用Devc++和easyx完成了游戏启动界面按钮的基本制作,实现了按钮的绘制以及鼠标悬停时的信息提示功能。然而,目前还存在一个问题,即鼠标移动时,提示文字会出现闪烁现象,有很多童鞋在阅读后都表示出了兴趣。这篇博文我们就来解决这个问题并对代码进行优化。
一、解决闪烁问题
1. 问题分析
提示文字闪烁的原因在于,每次鼠标移动触发WM_MOUSEMOVE
消息时,都会频繁地清除矩形区域并重新绘制文字。这导致画面不断刷新,从而产生闪烁感。为了解决这个问题,我们需要减少不必要的绘制操作。
2. 解决方案
我们可以通过记录当前鼠标悬停的按钮状态来判断是否需要更新提示文字。如果鼠标仍然悬停在同一个按钮上,就不需要重复清除和绘制。只有当鼠标从一个按钮移到另一个按钮时,才进行相应的操作。
在代码中,我们定义一个全局变量currentButtonIndex
来记录当前鼠标悬停的按钮索引,初始值设为 -1,表示没有悬停在任何按钮上。
int currentButtonIndex = -1;
然后,修改消息循环中的WM_MOUSEMOVE
处理逻辑:
ExMessage msg;
while (true) {
if (peekmessage(&msg, EM_MOUSE)) {
switch (msg.message) {
case WM_LBUTTONDOWN:
break;
case WM_MOUSEMOVE:
int newButtonIndex = -1;
if (msg.x >= 220 && msg.x <= 220 + 170 && msg.y >= 50 && msg.y <= 50 + 50)
newButtonIndex = 0;
else if (msg.x >= 220 && msg.x <= 220 + 170 && msg.y >= 1