easyx的使用(4)

1.键盘消息函数

1) getch(); //需要头文件 conio.h

2) GetAsyncKeyState(键值); //需要头文件 windows.h 但是由于Easyx包含了windows头文件,所以无需自己包含(其他需要windows头文件的函数也一样,但是需要在graphics.h的下方包含:比如放音乐的头文件mmsystem.h

getch();需要使用返回值来判断

1)与非ASCII表字符的按键比较,需要使用虚拟键值

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

2)如果是与字母比较直接写字母,比如‘A’

GetAsyncKeyState(键值);需要传一个键值,如果按下返回真

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

//因为运行后有图片,小球不断移动,图片会一闪一闪的,比较明显

//闪屏的原因,因为窗口在绘图,当小球不断移动,会不断地刷新,cleardevice()不断的清除,每一个流程我们都能看见,看见了不连贯就会卡,所以引出,在我们内存中创建一个和窗口一样大的缓冲区,画图的时候先在缓冲区里画图,这个是缓冲区我们看不到的,当缓冲区画完再显示到你能看见的窗口上,让你看见完整的画,会补帧。

//解决办法

#include<stdio.h>
#include<graphics.h>
#include<conio.h>
//使用_getch()注意_getch()和getch()功能一样
int main()
{
	initgraph(640, 480, SHOWCONSOLE);
	int x = 0, y = 0;
	while (1)
	{
		//双缓冲绘图需要放在绘图代码之前和之后//13行和24行
		BeginBatchDraw();
		setbkcolor(WHITE);//白色
		cleardevice();
		加载图片
		IMAGE img;
		loadimage(&img, "./1604456741637674.jpg", 100, 100);
		putimage(0, 0, &img);
		//控制球移动
		setfillcolor(BROWN);
		fillcircle(x, y, 20);
		//EndBatchDraw();
		FlushBatchDraw();//FlushBatchDraw()比EndBatchDraw();稳定一点
		//键盘函数2,这个可以斜着移动
		if (GetAsyncKeyState(VK_UP))//上
		{
			y -= 5;
		}
		if (GetAsyncKeyState(VK_DOWN))//下
		{
			y += 5;
		}
		if (GetAsyncKeyState(VK_LEFT))//左
		{
			x -= 5;
		}
		if (GetAsyncKeyState(VK_RIGHT))//右
		{
			x += 5;
		}
		键盘函数1
		// //getch()函数返回字符,为了兼容最好写_getch()
		//if (_kbhit())
		//{
		//	char key = _getch();
		//	//阻塞函数,不输入就一直在这里等
		//	//所以包括到if(kbhit)里面,kbhit函数
		//	//判断有没有键盘按下有返回真反之为假
		//	//vs2022下kbhit()不能用加上前面加上_就好了
		//	printf("%d %c\n", key, key);
		//	/*(控制台上的输出)
		//	输出   -32 ? //这是函数自动返回的值
		//			72 H //72对应字符是H
		//			- 32 ?
		//			80 P
		//			- 32 ?
		//			75 K
		//			- 32 ?
		//			77 M
		//			*/
		//	switch (key)
		//	{
		//	case 72://上键
		//	case 'w':
		//	case 'W'://将w和W定义为上键
		//		y -= 5;
		//		printf("上键\n");
		//		break;
		//	case 80://下键
		//	case 's':
		//	case 'S'://将w和W定义为下键
		//		y += 5;
		//		printf("下键\n");
		//		break;
		//	case 75://左键
		//	case 'a':
		//	case 'A'://将w和W定义为左键
		//		x -= 5;
		//		printf("左键\n");
		//		break;
		//	case 77://右键
		//	case 'd':
		//	case 'D'://将w和W定义为右键
		//		x += 5;
		//		printf("右键\n");
		//		break;
		//	}
		//}
	}
	getchar();
	closegraph();
	return 0;
}

运行结果

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值