欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

新版easyX图形库在VS2019中的几个问题及解决

程序员文章站 2022-03-04 19:07:04
...

        在最近的小学期中,笔者按照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 右键双击消息。