|
楼主 |
发表于 2009-3-27 22:07:10
|
显示全部楼层
首先,我们要做的就是截图…………进游戏,别关WB开张图,然后进WB把你可能需要用到的资源都编辑上,然后截下来,就象这样:
然后用画图板处理下,让它们变成这样注意请不要剪切到灰圈以外的部分,这有可能让图片比对变的不准确……另外,所有的图片保持大小统一……方便日后使用~~
这东西是要扔到“按键精灵安装目录/script”这个文件夹里的~~~
有了比对图片,现在开始正题,在限定范围内比对同一图片数量请注意,按键精灵只支持BMP格式的图片比对,文明4默认的截图格式是JPG,截图后需要转下格式
说实话,按键精灵对于图片比对方面做的并不好,只有如下一个公式可用……
VBSCall Call FindPic (x1,y1,x2,y2,filename,similar,x3,y3)
简单解释下,公式名FindPic是关键字,动了就不能用了,前面的VBSCall 和Call我没搞明白是啥东西,有一个能用,有两个也能用,好象没有就不能用
x1,y1,x2,y2分别代表了取样空间的左,上,右,下的范围,即x1,y1是取样区域的左上角坐标 x2,y2是取样区域的右下角坐标
filename 需要比对的样本名字(就是处理过的截图,再次强调,只支持BMP格式)
similar 相似度,从0.5到1 数值越大越精确,1为完全一致
x3,y3把获得的相似图片的坐标存储在这两个数值中
试例:在屏幕范围内寻找宝石个数
x1 = 0 //定义并且初始化扫描开始点的X坐标
y1 = 0 //定义并且初始化扫描开始点的Y坐标
gem = 0 //定义并且初始化宝石的个数记录
While{x1 < 1024} //循环,直到横轴坐标到达1024 (我这里用的是1024*768的扫描,这个x1以及下面那个y1可根据自己的屏幕大小,甚至窗口模式的窗口大小自行调整)
xfind = 0 //这个是用来定义本个纵轴扫描有没有发现宝石的
While{y1 < 768} //循环,直到纵坐标到达768
intX = 0 //定义并且初始化扫描到的宝石X坐标 //这里开始就是核心部分,要添加各种各样其他的比对都需要从这行开始
intY = 0 //定义并且初始化扫描到的宝石Y坐标
Call FindPic(x1,y1,x1+xa,y1+ya,"gem.bmp",0.9,intX,intY)
//在由x1,y1,x1+xa,y1+ya的范围内比对图片(xa,ya是指图片本身的宽和高,gem.bmp就是样图
//用0.9的精确度没有特殊意义,其实我自己一直用的1)
//上面这行代码的实际意思就是,只在一张图片的范围内寻找是不是有符合这张图片的内容
If intX > 0 and intY > 0 //因为intX,intY是用来记录找到的图片的坐标的,所以如果他们大于0,那么就有新的符合条件的图片位置给找到了
gem = gem + 1 //宝石数量加1
xfind = xfind + 1 //本纵列搜索到数量加1
y1 = y1 + ya-1 //直接跳过ya的距离(即样图高度)继续搜索
EndIf //核心部分到此结束
y1 = y1 +1 //这个纵坐标循环每执行一次,纵坐标就会往下移一格,直到768
EndWhile
If xfind > 0 //如果在本纵列中找到过至少1次的目标物体
x1 = x1 +xa-1 //直接跳过xa的距离(即样图的宽度)继续搜索
EndIf
x1 = x1 + 1 //这个横坐标循环每执行一次,横坐标就会往右移一格,直到1024
EndWhile //全部循环结束
Call MessageBox(gem) //弹个窗口出来告诉你有几个宝石
一楼到此结束,如果没看明白…………饿——我也不知道怎么办
[ 本帖最后由 neverblade 于 2009-3-28 04:27 编辑 ] |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|