最近在做穿越火线了一款游戏外挂,添加了一个红色准心的功能,可是遇到问题,进入游戏后红点一直闪,后来直接闪消失了。百思不得其解
我是这样做的,先获取当前屏幕分辨率,用System.Threading.timer开启一个时间线程,这个线程不断地在屏幕中间绘制红点,时间间隔是5ms,也可以改。不进入游戏的时候不闪,很正常。可以已进入游戏就闪个不停,后来干脆消失了。
我不知道是不是线程屏幕画红点的频率小于游戏画面刷新的频率。或者说我用线程去画红点这种方法一开始就不对。但线程去不断去绘制红点理论上行的通啊,可为什么进入游戏就不行了呢?问题出在哪呢?困惑了我好几个月至今未找到解决方法。
望大虾指点屏幕画红点不闪烁的正确方法,感激不尽。(试了双缓冲也不行)
双缓冲的时候需要在内存位图上绘制,同时需要拦截WM_ERASEBKGND消息返回一个空的画刷和禁止基类处理此消息。
不要在System.Threading.Timer中直接在屏幕绘制,应该在System.Windows.Forms.Timer中。
没做过外挂,一般闪烁的话,是因为背景被擦除了问题,你的问题可能是因为背景改变后,先画了背景输出到屏幕,然后你的绘制代码又单独的绘制了图形并输出屏幕。消失的问题很有可能是因为你的Timer没选择正确的问题。
如果用System.Windows.Forms.Timer的话,外挂程序的主界面会卡死的。为了避免这种情况。我特意选用了System.Threading.Timer。
@〆.落若兮。: 大哥,OnTimer 的时候,只是调用一次 Invalidate(FALSE),绘图的代码还是在 OnPaint 中去做。或者你用 Threading.Timer 在 Bitmap 上绘制,然后调用 Invalidate(FALSE),在 OnPaint 中直接把位图绘制到屏幕。
来搞笑一下,最简单的,用笔在屏幕上画个红点,在一些没有准心的FPS游戏我这么干过。。
以前碰到过屏幕闪烁的,双缓冲就可以的。
你试试创建个句柄,前置到最前,画个透明的图层。
没有准心的FPS?除了狙击不开镜没准心外都有准心的。没准心也太奇葩了吧。
就是用句柄获取到整个屏幕然后去画的
@〆.落若兮。: 关掉准心比较有真实感,瞄准要右键用瞄准孔打,而且有呼吸,枪口会上下抖动。
你这熊孩子,玩游戏就玩游戏,做什么外挂!自己添加红色准星假装盲狙么 ... 那你多此一举了,准星永远在屏幕正中央的,自己贴个东西就可以了。
呵呵,那外挂推出去不可能让玩家自己去在屏幕中间贴东西吧。加红色准心不是要去盲狙而是要去瞬狙。完全模仿游戏中玩家的瞬狙打法。
@〆.落若兮。: 我知道啊,盲狙的意思就是指瞬镜。你莫非打算卖这个外挂么。。。
@水牛刀刀: 额。。。盲狙什么时候等于瞬狙了。。。。。。盲狙不开镜,瞬狙有开镜过程的,只是非常快看不出来。扯远啦扯远啦~~~做了只是玩玩。话说我的号已经被封了,T_T
@〆.落若兮。: 我是说,我刚才那句话里的盲狙意思就是瞬镜,如果只按鼠标左键,子弹很容易乱飞,所以值得讨论的盲狙就是指瞬镜了,因为不瞬镜的盲狙根本没有讨论的价值。btw,我都是以cs为准的,不过cf应该是一样的。