06瞄准辅助

通过简单GDI绘图,使游戏窗口上出现设计好的辅助线作为准星,并且可手动调节准星的形状、大小、颜色等

##设计思路分析

1、开启线程,在循环中查找游戏窗口
2、游戏窗口存在时读取配置不断在游戏窗口和自身窗口上绘制辅助线

对象分析

游戏对象为Cs1.6(3248)和CsOkgogogo

主要函数介绍

HDC GetDC(HWND hWnd)
检索显示设备上下文环境的句柄

CDC
CDC类定义的是设备上下文对象的类

CPoint CDC::MoveTo(int x,int y);
CPoint CDC::LineTo(int x,int y);
绘制直线

BOOL CDC::Ellipse(int x1,int y1,int x2,int y2);
绘制圆形

BOOL CRgn::CreateRectRgn(int x1,int y1,int x2,int y2);
建立方形区域

BOOL CRgn::CreateEllipticRgn(int x1,int y1,int x2,int y2);
建立圆形区域

int CombineRgn(CRgn pRgn1,CRgn pRgn2,int nCombineMode );
合并区域(圆点准心为使得中间透明采取大圆-小圆的区域)

BOOL FillRgn(CRgn pRgn,CBrush pBrush );
填充形状

编写测试效果

打开辅助测试准星形状

打开辅助测试准星颜色


隐藏游戏自带准星
首先设置Cs中的自带准星透明(进入CS控制台输入cl_crosshair_color 0 0 0或修改strike目录下config.cfg的值)



设置复制准星后进入游戏
这是预设好的准星能显示在游戏中 

//十字准星
	cdc.MoveTo(width/2 - crosssize, height/2);
	cdc.LineTo(width/2 + crosssize, height/2);
	cdc.MoveTo(width/2, height/2-crosssize);
	cdc.LineTo(width/2, height/2+crosssize);




    //单点准星
	CBrush brush,*oldbrush;
	oldbrush=cdc.SelectObject(&brush);
	cdc.Ellipse(width/2 -1, height/2-1, width/2+1, height/2+1);
	cdc.SelectObject(oldbrush);




    //圆点准星
	CRgn r,r1,r2,rgn;
	r.CreateEllipticRgn(width/2-crossweight,height/2-crossweight,width/2+crossweight,height/2+crossweight);   //中心点
	r1.CreateEllipticRgn(width/2-crosssize-crossweight,height/2-crosssize-crossweight,width/2+crosssize+crossweight,height/2+crosssize+crossweight);
	r2.CreateEllipticRgn(width/2-crosssize,height/2-crosssize,width/2+crosssize,height/2+crosssize);
	rgn.CreateRectRgn(width/2-crosssize-crossweight-5,height/2-crosssize-crossweight-5,width/2+crosssize+crossweight+5,height/2+crosssize+crossweight+5);
	rgn.CombineRgn(&r1,&r2,RGN_DIFF);	//合并(大圆减小圆成环)
	CBrush bsh(RGB(red,green,blue));
	cdc.FillRgn(&r,&bsh);
	cdc.FillRgn(&rgn,&bsh);
	rgn.DeleteObject();
	r.DeleteObject();
	r1.DeleteObject();
	r2.DeleteObject();

总体评价

辅助窗口在绘制自身窗口上的准星时容易出现绘图无效区域,但不影响游戏(原因待查明),也可以不将准星绘制在自身窗口上

打赏作者

发表评论

电子邮件地址不会被公开。 必填项已用*标注