C++游戏项目实践一:跟随鼠标移动的小球

教程来源:【从零开始的C++游戏开发】EasyX开发环境搭建 | 跟随鼠标移动的小球_哔哩哔哩_bilibili

绘图资源库:EasyX

EasyX Graphics Library for C++

1.项目基本框架

2.相关组件
#include <graphics.h>		// 引用图形库头文件

 使用该头文件即可使用EasyX相关功能。

3.初始化绘制窗口:

将初始窗口代码写在while主循环之前,在循环结束前保持窗口存在。

 4.读取鼠标移动信息

鼠标信息结构体定义如下:

struct ExMessage
{
	USHORT message;					// 消息标识
	union
	{
		// 鼠标消息的数据
		struct
		{
			bool ctrl		:1;		// Ctrl 键是否按下
			bool shift		:1;		// Shift 键是否按下
			bool lbutton	:1;		// 鼠标左键是否按下
			bool mbutton	:1;		// 鼠标中键是否按下
			bool rbutton	:1;		// 鼠标右键
			short x;				// 鼠标的 x 坐标
			short y;				// 鼠标的 y 坐标
			short wheel;			// 鼠标滚轮滚动值,为 120 的倍数
		};

		// 按键消息的数据
		struct
		{
			BYTE vkcode;			// 按键的虚拟键码
			BYTE scancode;			// 按键的扫描码(依赖于 OEM)
			bool extended	:1;		// 按键是否是扩展键
			bool prevdown	:1;		// 按键的前一个状态是否按下
		};

		// 字符消息的数据
		TCHAR ch;

		// 窗口消息的数据
		struct
		{
			WPARAM wParam;
			LPARAM lParam;
		};
	};
};

 在主循环中再定义一个接受鼠标位置的循环,判断条件为当前鼠标动作为鼠标移动。

循环内接受当前鼠标位置坐标。

5.绘制图形

以鼠标位置坐标为参数绘制实心圆即可,使用circle()函数。但是这样绘制完的圆会停留在窗口上不会消失,没有完成随鼠标移动的目标。

因此每次绘制圆前需要清空窗口内容,使用cleardevice()函数。

此时运行代码后会发现虽然圆随鼠标移动,但是会不断闪烁并不连续。

此时使用双缓冲窗口解决,添加三行代码:BeginBatchDraw();FlushBatchDraw();EndBatchDraw();具体位置见总体代码。

代码如下:

#include <graphics.h>

int main() {

	initgraph(1280, 720);

	int x = 300;
	int y = 300;

	BeginBatchDraw();

	while (true)
	{
		ExMessage msg;
		while (peekmessage(&msg))
		{
			if (msg.message == WM_MOUSEMOVE) {
				x = msg.x;
				y = msg.y;
			}
		}
		cleardevice();
		solidcircle(x, y, 50);
		FlushBatchDraw();
	}
	EndBatchDraw();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值