游戏像劲舞团那样,只要进度条达到某个点,就按下键盘上的某个键就可以了,由于进度条跑得很快,我老是来不及按下,或按下过早。于是就有这个想法,转入正题:
我的思路是,首先:
var
point:Tpoint;
MyhDC : HDC;
begin
GetCursorPos(point);
scrx1:=point.x;
scry1:=point.y;
//获取到那个点的屏幕坐标,然后
temp := GetPixel(MyhDC,scrx1, scry1);
rr := GetRValue(temp);
gg := GetGValue(temp);
bb := GetBValue(temp);
取得该点的颜色。放一个Timer作为计数器,每过一个很短的时间,就取这个点的颜色去判断。(颜色条走到那里跟没走到那里的颜色我都知道)
如果是进度条已经到那里了(点是红色的),就
keybd_event(58,0,0,0);
按下某个键。
这个思路比较想得理所当然一样,呵呵
问下如果遇到一下问题怎么解决:
1、我想因为进度条跑得太快了,所以我可能要把 Timer 的 Interval调得很小,大概 20左右吧,这样的话会不会占CPU很厉害搞到我电脑很卡?(我不是专门搞DELPHI的,只要不至于让我电脑完全卡到不行就可以了,电脑是CPU,赛扬4,2.66G,内存512,显卡256M128bit)2、我的显示器是液晶的,不知道是游戏占资源太大的原因,还是显示器刷新的原因。总感觉进度条有点跳(在美工的电脑上不会)。我用这样的方式去处理,会不会有进度条一次跳过我要的点太远的情况。也就是说我上面的取点,跟我屏幕上看到的东西,有没有直接的关系?
麻烦各位大侠就上面的思路给点建议,如果有好的方法也说下哦,谢谢了
我的思路是,首先:
var
point:Tpoint;
MyhDC : HDC;
begin
GetCursorPos(point);
scrx1:=point.x;
scry1:=point.y;
//获取到那个点的屏幕坐标,然后
temp := GetPixel(MyhDC,scrx1, scry1);
rr := GetRValue(temp);
gg := GetGValue(temp);
bb := GetBValue(temp);
取得该点的颜色。放一个Timer作为计数器,每过一个很短的时间,就取这个点的颜色去判断。(颜色条走到那里跟没走到那里的颜色我都知道)
如果是进度条已经到那里了(点是红色的),就
keybd_event(58,0,0,0);
按下某个键。
这个思路比较想得理所当然一样,呵呵
问下如果遇到一下问题怎么解决:
1、我想因为进度条跑得太快了,所以我可能要把 Timer 的 Interval调得很小,大概 20左右吧,这样的话会不会占CPU很厉害搞到我电脑很卡?(我不是专门搞DELPHI的,只要不至于让我电脑完全卡到不行就可以了,电脑是CPU,赛扬4,2.66G,内存512,显卡256M128bit)2、我的显示器是液晶的,不知道是游戏占资源太大的原因,还是显示器刷新的原因。总感觉进度条有点跳(在美工的电脑上不会)。我用这样的方式去处理,会不会有进度条一次跳过我要的点太远的情况。也就是说我上面的取点,跟我屏幕上看到的东西,有没有直接的关系?
麻烦各位大侠就上面的思路给点建议,如果有好的方法也说下哦,谢谢了
按下某键后,记得立即
keybd_event(58,0,2,0);
释放,才真正完成一次按键。
至于你的问题
1显然不会。
2有,估计是内存不够。导致游戏本身卡
我的方法不行哦,奇怪了,以前别的游戏都可以了,现在用这个方法,得到的颜色总是黑色,
即RGB都是 0 。为什么会这样呢,有什么办法可以得到那个点的颜色?
写个汇编的函数 函数里自己给自己发 message
先jmp 到自己的代码 再jmp回去.
还是用线程去检查几个标识点的颜色来确定是否到达。
考虑到延迟情况可以判断前一两毫米的颜色。
HprSnap6 能截图是设置里你打开了DirectX截图功能,关了也是一片黑.
看看能不能考到画图中,
能就是啥盾的问题。
能指点下大概用哪方面的 DirectX函数 吗?
To AFIC(AFIC),游戏中printscreen 本来就是那个游戏里面截图用的~~~