TC官方合作论坛
标题: 安卓教程——找图完成雷霆*战机*无尽版 [打印本页]
作者: TC兔子 时间: 2015-4-17 13:41
标题: 安卓教程——找图完成雷霆*战机*无尽版
本帖最后由 TC兔子 于 2015-4-17 13:54 编辑
由于身体原因,有很久一段时间没有写代码,更顾不上写教程。趁着这次5.0发布,写点简单的教程,给想学习的朋友。刚开始用的是我自己的手机,过两天再说怎么连接模拟器来写。靠谱助手,海马玩,天天,自己百度吧。
仅限新手朋友观看,老鸟们就绕道吧,我这水平已经跟不上你们的节奏了!
请注意:代码没有进行复杂处理,只支持480*720分辨率的手机。如有不适,请自行截图。
免责声明:本文章仅仅个人娱乐,请勿用于商业用途,如有游戏封号等一切不良后果,请自负!
首先,简单说下几个找图的api
findpic:就是按顺序找图,找到了就返回。如果你有好几个图片“rc:pic1.bmp|rc:pic2.bmp|......”,假如屏幕中有pic2, pic3,那么,当他找到pic2的时候,他就返回了,不再去找pic3。所以,如果仅仅只需要找一张图,用这个函数比较好。
他的返回值是:图片的索引号。
findpics:这个是findpic的双胞胎兄弟,他也是只找一张图片,第一张找到的图片。但是他的区别是,他的返回值是:图片的名称。
findpicex:这个函数就不一样了,他能找多个图片,并且把所有找到的图片都返回给你。
这里就有问题了,他返回的都是什么信息?如何处理?
他的返回值是:图片的索引号,x坐标,y坐标。这个图片索引号就是你给他的图片的顺序,不过他是从0开始计数的。
还有需要注意的就是,如果找图界面中同时出现几个要找的图片,那么他都会把这些坐标信息反馈在返回值里,区别就是他们的坐标不同。
findpicexs:这还用讲么,就是把索引号换成文件名了。
第二,实用找图api
新建一个安卓项目
双击项目就可以看到
- function floatwinrun()
- //浮动窗口运行按钮执行的事件,如果不需要可去掉
- messagebox("你好世界")
- end
复制代码
这个函数,就是你在手机上点击运行按钮时执行的内容
[attach]19933[/attach]
点击以后会出现
[attach]19934[/attach]
需要注意的是:这个函数本身就是一个线程函数,如果需要加入while,for不需要再重新开线程了。可以直接使用。
想找图得有工具吧,TC自带图色助手:
[attach]19935[/attach]
打开以后就可以看到以下界面
[attach]19936[/attach]
如果向知道具体啥用,自己去点点吧,反正坏不了你的电脑。
说正经的,用图色助手截图吧
[attach]19924[/attach] [attach]19925[/attach] [attach]19926[/attach] [attach]19927[/attach] [attach]19928[/attach] [attach]19929[/attach] [attach]19930[/attach] [attach]19931[/attach] [attach]19932[/attach]
[attach]19959[/attach]
这是我截取的几个图片,没有全部列出来。
上代码
- var winh, winw
- var picnamearray = array("rc:endless.bmp", "rc:friend.bmp", "rc:buyitem.bmp", "rc:attack.bmp", "rc:dead.bmp", "rc:rewoard.bmp", "rc:continue.bmp")
- function floatwinrun()
- //浮动窗口运行按钮执行的事件,如果不需要可去掉
- // messagebox("你好世界")
- sysgetscreen(winw, winh)
- main()
-
- end
- function main()
- var totalstring = picnamearray[0]
- var totallen = arraysize(picnamearray)
- for(var i = 1; i < totallen; i++)
- totalstring = totalstring & "|" & picnamearray[i]
- end
-
- var retstr, retstrarraylen
- var retstrarray //定义变量
- var retx = 0, rety = 0
- while(true)
- retstr = findpicex(0, 0, winw, winh, totalstring, "151515", 0.9, 0) //使用了找多图的函数
- if(strlen(retstr) > 0)
- retstrarraylen = strsplit(retstr, "|", retstrarray) //获得数组的长度,并且进行分割
- traceprint(retstrarraylen)
- if(retstrarraylen == 1) //如果数组长度为1,则意味着只找到了一个图片,没有选择性,只需要进行点击
- var picpos
- traceprint(retstrarray[0])
- strsplit(retstrarray[0], ",", picpos) //再次分割找到图片的位置
- retx = cint(picpos[1])
- rety = cint(picpos[2])//这里方便新手看,多加了两步
- tap(retx, rety)
- waitcondition(picnamearray[cint(picpos[0])], false) //这个是一个等待点击结果,具体后面再解释
- elseif(retstrarraylen == 2)
- var picpos
-
- for(var i = 0; i < 2; i++)
- strsplit(retstrarray[i], ",", picpos)
- if(picpos[0] == "3")
- retx = cint(picpos[1])
- rety = cint(picpos[2])//这里方便新手看,多加了两步
- tap(retx, rety)
- waitcondition(picnamearray[cint(picpos[0])], false)
- end
- end
- end
- else
- traceprint(retstr)
- end
-
- sleep(300) //例行等待,不用占用太多资源
- end
- end
- ////////////////////////////////////
- //等待状态,判断是否继续
- //参数:1.图片名字;2.是否存在;3.等待时长
- ///////////////////////////////////
- function waitcondition(name, trueorfalse, longtime=50)
- var rets=-1, retx = 0, rety = 0
- for(var i = 0; i < longtime; i++)
- rets = findpic(0, 0, winw, winh, name, "102030", 0.9, 0, retx, rety)
- if(trueorfalse)
- if(rets >=0 )
- break
- end
- else
- if(rets < 0)
- break
- end
- end
- sleep(100)
- end
- end
复制代码
作者: yy4363 时间: 2015-4-17 13:45









:-oTC:-oTC:-oTC
作者: TC管理员 时间: 2015-4-17 16:30
支持
作者: jrflsh 时间: 2015-4-17 17:18
支持一下
作者: jswqwjf 时间: 2015-7-15 14:21
菜鸟一个
没看懂
有视频教程没
作者: stark_liu 时间: 2015-11-23 13:17
哥,能否写得仔细一点?
作者: snowtscx 时间: 2016-5-8 13:21
MARK~~~~~~~
作者: guozhengzhong 时间: 2017-3-25 09:54
TC安卓版,手指点击无效,怎么办?
欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) |
Powered by Discuz! X3.1 |