本文学习于B站,记录,借鉴;

视频链接:键盘操作与物体移动_哔哩哔哩_bilibili

非easyx函数----键盘消息函数;注意头文件的引用conio.h

使用_getch();接受键盘读入值;后续在case里面放入要变化的逻辑,在这里就举一个wasd移动的例子://_getch();是一个阻塞函数;如果不输入就一直死卡那里。

 可以添加图形,并改变图形位置重新打印实现移动操作;这里画一个实心边框圆为例子:

 在控制台输入wasd就会实现移动,但是移动存在移动痕迹,因为我们的移动只是每次进行位置打印,如果不想看见上一次打印痕迹就要在循环开始增加一个cleardevice();函数每次进行清屏重新打印;但是清屏会把之前所有打印操作都清除,想保留之前的操作那么循环的开始就得在最开始打印进行循坏;

这种操作只是利用计算机运行速度快,产生的视觉效果,人们看不见被清除,再重新打印,只能看见重新打印后的画面,所以也会出现bug,插入图片,在图片上移动 清屏打印是会出现闪屏的情况的,要避免闪屏看接下来的操作;

 在绘图前使用BeginBatchDraw();函数

绘图后使用EndBatchDraw();函数

这样循坏图片就不会出现闪屏效果,消除闪屏效果;

原理:不使用函数是直接在图像窗口进行刷新打印,每一步都立即完成立即刷新,但是使用完函数后是在一个缓冲区内部进行图像的绘画,无论你进行什么操作,进行多少次操作都没关系,都不会体现在图像窗口中,只有缓冲区图像绘画完成再一次性打印到图像窗口,所以就避免了频繁闪屏的情况;

 画图前;

 画图后;建议将EndBatchDraw();函数换成FlushBatchDraw();对于处理闪屏效果更好一点;

 前面提到了_getch();函数是一个阻塞的,如果不想让它阻塞就在外层增加一个kbhit()函数判断;kbhit()函数用于监测键盘是否有按下,按下就进入判断内部。

上述的wasd移动还可以使用别的方式来监控键盘

 这样可以替代繁琐的一大串,并且这样写更加优一点,可以体现出斜着移动,但是用第一种switch不能体现出斜着移动的效果;建议这样写;