《大漠插件字库原理介绍》由会员分享,可在线阅读,更多相关《大漠插件字库原理介绍(12页珍藏版)》请在金锄头文库上搜索。
1、首先说明下大漠综合工具制作字库的过程和原理1.截取你所需要的图片2.点击你所需要字的颜色3.点击提取点阵4.输入字符 按回车生成字库具体的原理我不好说,但是就我的理解是:对图片中不符合指定颜色的部分去除掉,然后二值化获取点阵,点阵也就是这些颜色的分布规律,二值化就是黑白两色,RGB 格式中黑色000000白色ffffff由于我的脚本在别人电脑上运行的时候经常失效,今天改成 16 位色后我机器上运行也失效了,而我这个脚本主要采用的就是大漠插件的找字功能,我以为是机器间的色偏造成的,一直想法子算色偏,但是我失败了。后来我想起论坛上有个帖子专门讲过同色系的 RGB 格式中 R 值是不变的(不好意思忘
2、了作者了,在这里致谢)于是我就在大漠综合工具的色偏处输入了 00ffff 结果是在 16 位色环境下,大漠综合工具中二值化区域内的字显示的跟我在 32 位色环境下做的一模一样,接着我提取点阵,制作字库,进行调试,命令格式如下:dm_ret =dm.FindStr(0,0,978,585, 码, ffd463-00ffff, 1.0, x1, y1)If x1 = 0 Then MessageBox x1 & y1End If准确的弹出了 x,y 的坐标值接着我换 32 位色做同样的调试,显示结果与 16 位色下相同,我测了坐标正好是我要找的字的左上角经多次测试发现这个方法中字色的 R 值必须为
3、 FF 或 00(至于 F1,01 等未测试,有兴趣的朋友可以试试)庆幸啊以后找字可以不考虑偏色了 呵呵 再说了考虑我也不会算具体原理我也不是很懂,但是我估计应该是:我比较了点阵中 R 值相同的所有点,取得符合二值化点阵区域内所有的点造成的再次提醒 此方法只适合 R 值为 00,FF 的 其他位置相同的未测试当然这么做效率是低了点,但是在我看来脚本应该是:稳定性通用性 执行效率,毕竟脚本也是你编写的一种软件吗鲜花,银币在哪 拿来啊 呵呵简单说下后台操作的方法,先判断该窗口是否支持后台, 用下面的语句:Hwnd=Plugin.Window.Foreground()Hwmd=Plugin.Wind
4、ow.GetkeyFocusWnd()If Hwmd0 and y-int(bxy(1)0 and x-(int(bxy(2)+int(bxy(0)0 And intY0 Thenmsgbox intX & , & intYMoveTo intX,intYEnd If找图类似Call FindPic(0,0,1024,768,Attachment:神盾 .bmp,0.9,intX,intY) If intX0 And intY0 Thenmsgbox intX & , & intYMoveTo intX,intYEnd IfVBSEnd使用插件调用方法!Import color.dllVBSB
5、egin 需要插入的 VBS 代码a=Color.GetRGB(255,255,255)msgbox aVBSEnd一直以来按键精灵都无法支持结构这种做法,我们只能模拟类似方法!例子模拟:让按键精灵支持结构排序!/语法格式:数组 () = 数字大小=值dim NB_PaiXu(9)NB_PaiXu(0) = 200=ANB_PaiXu(1) = 3=BNB_PaiXu(2) = 5=CNB_PaiXu(3) = 4=DNB_PaiXu(4) = 9=ENB_PaiXu(5) = 7=FNB_PaiXu(6) = 12=GNB_PaiXu(7) = 94=HNB_PaiXu(8) = 60=IN
6、B_PaiXu(9) = 60=JGosub 【最牛排序的算法 】MsgBox 得到结果: & PaiXuEndScript Sub 【 最牛排序的算法】/ 初始赋值Int_A = 0: Int_Num = UBound(NB_PaiXu)For Int_NumInt_B = Int_A: Int_Len = Int_Num - Int_B + 1For Int_Len/根据“=”号分离,进行大小判断A_Str = Split(NB_PaiXu(Int_A), =): B_Str = Split(NB_PaiXu(Int_B), =)If Clng(A_Str(0) Clng(B_Str(0)
7、Int_Temp = NB_PaiXu(Int_A): NB_PaiXu(Int_A) = NB_PaiXu(Int_B): NB_PaiXu(Int_B) = Int_TempEndIf Int_B = Int_B + 1EndFor Int_A = Int_A + 1EndFor / 排序结果PaiXu = Join(NB_PaiXu)/ 返回最大值/PaiXu = NB_PaiXu(Int_Num)/ 返回最小值/PaiXu = NB_PaiXu(0)Return关于自定义界面问题很多用户在使用 UserVar 用户变量时,想使用数组变量;但是按键不支持 UserVar 数组的定义,那该
8、如何解决呢?下面还是写代码举例吧:/按键脚本例子/按键用户设置变量的脚本UserVar HP=0 补血量UserVar MP=0 补蓝量Msgbox HP & & MPVB 界面代码在界面上放 2 个 Txet1 文本控件,做成数组( 不懂做数组控件的可以先放一个 Txet1 文本控件,然后选它,Ctrl+C 复制,在 Ctrl+V 粘贴出来,选择【确定】即可变为数组了)Public Sub OnSave()ClearControlData 固定位置,不需要进行修改*以下的内容,可以自己修改或者删除Call SaveControlData(HP, Text1(0).Text) HP 为用户自定
9、义变量名,控件数组值Call SaveControlData(MP, Text1(1).Text) MP 为用户自定义变量名,控件数组值End SubPublic Sub OnLoad() *以下的内容,可以自己修改或者删除Text1(0).Text = LoadControlData(HP) 控件数组值 = HP 为用户自定义变量名Text1(1).Text = LoadControlData(MP) 控件数组值 = MP 为用户自定义变量名End Sub这样就可以随便使用控件数组了。不影响脚本自定义变量名无限循环大家都知道按键精灵脚本可以自定义循环,按键精灵本身也可设置无限循环但有没有人发
10、现自定义循环次数那输入-1,可以执行无限循环,即使按键精灵本身没有设置无限循环,也可以执行无限循环特别是打包成小精灵时,只要在自定义循环输入窗口那输入-1,就可以使想要的那段脚本执行无限循环1.2. UserVar Var1=-1 输入-1 可无限循环3. For Var14. LeftClick 15. EndFor复制代码- -!不错。 。新发现。 。 。鼓励下。按键事有无限循环的 WHite 这事条件循环条件为真的时候循环只要设置一个永远为真的值就事无限循环了比如例子 1a=1white a=1例子 2white 1 /非 0 值为真,0 值为假例子 3white true /true
11、是真的意思(我一般这样用)还有向跳转 GOTO 也可以做到无限循环。 。 。 。 。例子 REM 1 /定义一个标签(记)1。goto 1 / 跳到标签 1.。 。/现在就 MsgBox 函数操作简单简绍用法/字符串提示换行写法MsgBox a&vbcr&b&vbcr&c/或者使用 chr(13),chr(10)效果一样MsgBox a&chr(13)&b&chr(10)&c/带有警告标志的窗口MsgBox a&chr(13)&b&chr(10)&c,16/显示确定取消按钮MsgBox a&chr(13)&b&chr(10)&c,1/让窗口显示到最前写法MsgBox a&vbcr&b&vbcr
12、&c,4096/让窗口显示标题MsgBox a&vbcr&b&vbcr&c,4096,天那边/hehe 综合一下,让窗口显示换行+警告标志+显示确定取消按钮+默认为取消+最前+ 标题MsgBox a&vbcr&b&vbcr&c,16+1+256+4096,天那边/写到这里大家一定明白了吧。关键是 buttons 项的设置值其中的可以是数字也可以是表达式我一般采用表达式,这样可以使自己看到 msgbox 语句的属性/这里再来举个 msgbox 的返回值例子如下:dim aa=MsgBox (a&vbcr&b&vbcr&c,16+1+256+4096,天那边)If a=1MsgBox 您点击了确定 Else If a=2MsgBox 您点击了取消EndIf EndIf EndScript