新版easyX图形库在VS2019中的几个问题及解决
在最近的小学期中,笔者按照easyX教程通过Visual Studio2019进行游戏设计,过程中出现了不少新问题。笔者才疏学浅,对许多bug的形成原因不求甚解,现将解决方式整理以飨读者。
1.outtextxy函数的文本输出
在Visual Studio2019中出现了:
error C2665: “outtextxy”: 2 个重载中没有一个可以转换所有参数类型
问题原因:Visual Studio2019采用Unicode字符集,MBCS编码无法正常通过。
解决方法:
1.将字符串前加L,转换成Unicode字符。
setbkmode(TRANSPARENT); //背景调为透明
outtextxy(Width * 0.48, High * 0.9, L"Score:");
2. LPCTSTR 可以同时适应两种编码,需要使用 TCHAR 字符串及相关函数。
// 输出数值 1024,先将数字格式化输出为字符串(项目字符集)
TCHAR s[5];
_stprintf_s(s, _T("%d"), 1024); //个人在VS2019里这么写,还看到有人不带_s,但我这里程序跑不了
outtextxy(10, 60, s);
2.mciSendString无法播放音乐
mciSendString(L"open D:\\planebattle\\game_music.mp3 alias bkmusic", NULL, 0, NULL);
代码段正确但是无法播放音乐。
解决方法:
1.注意是否遗漏Windows Multimedia API引用。
#pragma comment(lib,"Winmm.lib")
2.注意后续语句段的命令,将NULL参数修改为0。关于命令的修改可参考:(17条消息) 解决用mciSendString()函数不能播放音乐的问题_lyy0xfff的博客-CSDN博客_mcisendstring播放不出音乐
mciSendString(L"open D:\\planebattle\\game_music.mp3 alias bkmusic", 0, 0, 0);
mciSendString(L"play bkmusic repeat", 0, 0, 0);
3.网易云部分音乐显示为MP3格式但是实际上不能播放,建议别用网易云下载 。
3.MouseHit、GetMouseMsg等函数的废弃
在新版本的easyX中,用结构体ExMessgae保存鼠标信息,用peekmessage和getmessage函数替代了MouseHit和GetMouseMsg函数。
//旧版
while(MouseHit())
//新版(参考)
ExMessage m;
while (peekmessage(&m, EM_MOUSE, PM_NOREMOVE))
EM_MOUSE:鼠标信息 。
PM_NOREMOVE:在处理完消息后,不从消息队列中移除,也可以通过PM_REMOVE来将消息移除。
//旧版
MOUSEMSG m;
m = GetMouseMsg();
m.uMsg == WM_MOUSEMOVE
//新版(参考)
ExMessage m;
m = getmessage(EM_MOUSE);
m.message == WM_MOUSEMOVE
4.在Visual Studio2019中的<conio.h>
这个比较简单,注意kbhit(),getch()等函数在VS2019中的正确书写形式,如 kbhit()->_kbhit(), getch()->_getch()等。
附:ExMessage详解
标志 | 描述 |
EM_MOUSE | 鼠标消息。 |
EM_KEY | 按键消息。 |
EM_CHAR | 字符消息。 |
EM_WINDOW | 窗口消息。 |
其中的EM_MOUSE详细描述如下:
WM_MOUSEMOVE | EM_MOUSE | 鼠标移动消息。 |
WM_MOUSEWHEEL | 鼠标滚轮拨动消息。 | |
WM_LBUTTONDOWN | 左键按下消息。 | |
WM_LBUTTONUP | 左键弹起消息。 | |
WM_LBUTTONDBLCLK | 左键双击消息。 | |
WM_MBUTTONDOWN | 中键按下消息。 | |
WM_MBUTTONUP | 中键弹起消息。 | |
WM_MBUTTONDBLCLK | 中键双击消息。 | |
WM_RBUTTONDOWN | 右键按下消息。 | |
WM_RBUTTONUP | 右键弹起消息。 | |
WM_RBUTTONDBLCLK | 右键双击消息。 |
上一篇: 时间进行加减操作