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
新建一个安卓项目
双击项目就可以看到
  1. function floatwinrun()
  2. //浮动窗口运行按钮执行的事件,如果不需要可去掉
  3. messagebox("你好世界")
  4. 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]
这是我截取的几个图片,没有全部列出来。


上代码

  1. var winh, winw
  2. var picnamearray = array("rc:endless.bmp", "rc:friend.bmp", "rc:buyitem.bmp", "rc:attack.bmp", "rc:dead.bmp", "rc:rewoard.bmp", "rc:continue.bmp")

  3. function floatwinrun()
  4.         //浮动窗口运行按钮执行的事件,如果不需要可去掉
  5.         //        messagebox("你好世界")
  6.         sysgetscreen(winw, winh)
  7.         main()
  8.         
  9. end

  10. function main()
  11.         var totalstring = picnamearray[0]
  12.         var totallen = arraysize(picnamearray)
  13.         for(var i = 1; i < totallen; i++)
  14.                 totalstring = totalstring & "|" & picnamearray[i]
  15.         end
  16.         
  17.         var retstr, retstrarraylen
  18.         var retstrarray //定义变量
  19.         var retx = 0, rety = 0
  20.         while(true)
  21.                 retstr = findpicex(0, 0, winw, winh, totalstring, "151515", 0.9, 0) //使用了找多图的函数
  22.                 if(strlen(retstr) > 0)
  23.                         retstrarraylen = strsplit(retstr, "|", retstrarray) //获得数组的长度,并且进行分割
  24.                         traceprint(retstrarraylen)
  25.                         if(retstrarraylen == 1) //如果数组长度为1,则意味着只找到了一个图片,没有选择性,只需要进行点击
  26.                                 var picpos
  27.                                 traceprint(retstrarray[0])
  28.                                 strsplit(retstrarray[0], ",", picpos) //再次分割找到图片的位置
  29.                                 retx = cint(picpos[1])
  30.                                 rety = cint(picpos[2])//这里方便新手看,多加了两步
  31.                                 tap(retx, rety)
  32.                                 waitcondition(picnamearray[cint(picpos[0])], false) //这个是一个等待点击结果,具体后面再解释
  33.                         elseif(retstrarraylen == 2)
  34.                                 var picpos
  35.                                 
  36.                                 for(var i = 0; i < 2; i++)
  37.                                         strsplit(retstrarray[i], ",", picpos)
  38.                                         if(picpos[0] == "3")
  39.                                                 retx = cint(picpos[1])
  40.                                                 rety = cint(picpos[2])//这里方便新手看,多加了两步
  41.                                                 tap(retx, rety)
  42.                                                 waitcondition(picnamearray[cint(picpos[0])], false)
  43.                                         end
  44.                                 end
  45.                         end
  46.                 else
  47.                         traceprint(retstr)
  48.                 end
  49.                
  50.                 sleep(300) //例行等待,不用占用太多资源
  51.         end
  52. end

  53. ////////////////////////////////////
  54. //等待状态,判断是否继续
  55. //参数:1.图片名字;2.是否存在;3.等待时长
  56. ///////////////////////////////////
  57. function waitcondition(name, trueorfalse, longtime=50)
  58.         var  rets=-1, retx = 0, rety = 0
  59.         for(var i = 0; i < longtime; i++)
  60.                 rets = findpic(0, 0, winw, winh, name, "102030", 0.9, 0, retx, rety)
  61.                 if(trueorfalse)
  62.                         if(rets >=0 )
  63.                                 break
  64.                         end
  65.                 else
  66.                         if(rets < 0)
  67.                                 break
  68.                         end
  69.                 end
  70.                 sleep(100)
  71.         end
  72. 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