easyx(键盘操作,音频输出)

键盘操作

获取键盘信息

getch()

getch需要包括头文件  #include<conio.h>  ,且getch是有返回值的。

比如说要获得键盘上的上下左右按键,那么就有不同于acsii码表的一组数值

  • 上:72
  • 下:80
  • 左:75
  • 右:77

所以用getch获取键盘信息可以这么用


while(1)
{
cleardevice();
setfillcolor(RED);
fillcircle(x,y,20);

int key = _getch();


switch (key)
		{
			//上键
		case 72:
		case'w':
		case'W':
			y-=10;
			printf("上键\n");
			break;
			//左键
		case 75:
		case 'a':
		case 'A':
			x-=10;
			printf("左键\n");
			break;
			//下键
		case 80 :
		case 's':
		case 'S':
			y+=10;
			printf("下键\n");
			break;
			//右键
		case 77 :
		case 'd':
		case 'D':
			x+=10;
			printf("右键\n");
			break;
		}
}

表达出来的效果就是:

 GetAsyncKeyState()

与getch不同的是,getch只能控制直走不能斜着走,而此函数可以斜着走;

    • 上:VK_UP
    • 下:VK_DOWN
    • 左:VK_LEFT
    • 右:VK_RIGHT

代码表示

int x=0,y=0;
while(1)
{
   setfillcolor(RED);
   fillcircle(x,y,20);
   cleardevice();




if (GetAsyncKeyState(VK_UP))//上键
		{
			y -= 5;
		}
		if (GetAsyncKeyState(VK_DOWN))//下键
		{
			y += 5;
		}
		if (GetAsyncKeyState(VK_LEFT))//左键
		{
			x -= 5;
		}
		if (GetAsyncKeyState(VK_RIGHT))//右键
		{
			x += 5;
		}
}

在每次循环用cleardevice后,发现会导致每一次移动小球都会使得屏幕闪动,那么此时就要创建一个缓冲区

BeginBatchDraw和EndBatchDraw—缓冲区(批量绘图)

这俩个函数分别放在绘图之前和绘图之后,这样就会有一个缓冲区;

原理:在每次进行小球的运动操作时,都会现在缓冲区内进行变化然后再输出到当前屏幕内;

音频播放

头文件包含

#include<graphcis.h>

#include<mmsystem.h>//必须在graphics.h后面

#pragma comment(lib,"WINMM.LIB")  //静态库

打开,播放音乐 mciSendString()

打开:mciSendString("open  音乐文件",NULL,0,NULL);

播放:mciSendString("paly 音乐文件",NULL,0,NULL);

关闭:mciSendString("close 音乐文件",NULL,0,NULL);

当音乐文件比较长时,可以在打开音频的音乐文件后面加上alias  新名字,下次再次提及到这个音乐文件的时候可以用新名字代替;

如:

    mciSendString("open C:\\Users\\HUAWEI\\Music\\入睡.mp3 alias BGM", NULL, 0, NULL);
    mciSendString("play BGM repeat", NULL, 0, NULL);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EasyX图形库中,可以使用以下函数来获取键盘操作: 1. GetAsyncKeyState(int vkey) 该函数用于获取指定虚拟键码对应的键盘状态,返回值为一个short类型的值,如果返回值的最高位为1,则表示对应的键被按下,否则表示对应的键没有被按下。vkey参数是虚拟键码,可以使用VK_XXX常量来指定。 2. GetKeyNameText(DWORD lParam, LPTSTR lpString, int nSize) 该函数用于将键盘消息的lParam参数转换为对应的键名字符串。lParam参数是一个32位值,表示键盘消息的详细信息,lpString参数是指向一个缓冲区的指针,用于存储转换后的键名字符串,nSize参数是缓冲区的大小。 3. keybd_event(BYTE bVk, BYTE bScan, DWORD dwFlags, DWORD dwExtraInfo) 该函数用于模拟键盘操作,可以发送键按下和键松开的消息。bVk参数是虚拟键码,bScan参数是扫描码(一般可以设置为0),dwFlags参数是操作标志,可以指定按下键、松开键或者同时按下和松开键,dwExtraInfo参数是附加信息,一般可以设置为0。 在使用这些函数时,需要注意以下几点: 1. 在调用GetAsyncKeyState函数时,需要使用位运算符&获取键盘状态的具体值,如: ``` if ((GetAsyncKeyState(VK_UP) & 0x8000) != 0) { // UP键被按下 } ``` 2. 在使用GetKeyNameText函数时,需要先将键盘消息的lParam参数转换为虚拟键码,然后再调用GetKeyNameText函数,如: ``` DWORD vkCode = ((KBDLLHOOKSTRUCT*)lParam)->vkCode; TCHAR keyName[64]; GetKeyNameText(vkCode << 16, keyName, 64); ``` 3. 在使用keybd_event函数时,需要发送按下和松开两个键盘消息,如: ``` keybd_event(VK_LEFT, 0, 0, 0); keybd_event(VK_LEFT, 0, KEYEVENTF_KEYUP, 0); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值