我們在用找色的時候比較頭痛的問題是很難找到一個色值能準確的和其它目標區別,如果想用多點找色又得把區域定得很小,只能判斷是還是不是。我這個函數解決了上面的兩個問題,我們可以用多個色值,進行大範圍查找,這樣既可以用多個色值減小誤差,也可以在大的區域內找目標,而且因為用了以找主色為主線,找到才確定輔色的方式,效率大大提高,當然還有找圖所沒有的兼容性和便利性,輔色的數量可變更增加了函數應用範圍。函數使用不多,難免有考慮不周的地方,發現BUG請跟帳說明或者糾正,聯繫本人也可以。

  1. --H.R製作,H.R LUA腳本教學羣:165488683
  2. --參數說明:一個主色值,相似度及查找範圍,這個和一般找色沒差別
  3. --W,H這兩個參數為主色找到後找輔色的範圍,W表示主色前後的距離,H表示主色上下的距離,這樣找輔色的區域總大小是2W*2H
  4. --ARG用來存放輔助色的數組,我也不知道什麼原因,觸摸使用可變參數總是報錯,不得於只有使用一個數組來做參數,這樣我們的輔助色數量也是可變的,只是在調用的時候,得用{}把色值包起來。如:{0xDBEEFA,0xDCEFFC,0xDDEEFB,0x1295E9,0xff0000}。
  5. --返回值說明:返回三個參數,分別是成功標誌,找到是TRUE,找不到是FALSE,主色值坐標,找到就是有效點坐標點,找不到返回-1.
  6. function mutifindcolor(zhusezhi,xsd,x1,y1,x2,y2,w,h,arg)
  7. cgbj=0;
  8. repeat
  9. xz,yz=findColorInRegionFuzzy(zhusezhi,xsd,x1,y1,x2,y2);
  10. if xz>0 then
  11. for i,v in pairs(arg) do
  12. local xf,yf=findColorInRegionFuzzy(arg[i],xsd,xz-w,yz-h,xz+w,yz+h);
  13. if xf>0 then
  14. cgbj=1;
  15. else
  16. cgbj=0;
  17. break;
  18. end
  19. end
  20. if cgbj==1 then
  21. return true,xz,yz;
  22. end
  23. xtmp,ytmp=xz+1,yz;
  24. repeat
  25. xz1,yz1=findColorInRegionFuzzy(zhusezhi,xsd,xtmp,ytmp,x2,ytmp);
  26. if xz1>0 then
  27. for i,v in pairs(arg) do
  28. local xf,yf=findColorInRegionFuzzy(arg[i],xsd,xz1-w,yz1-h,xz1+w,yz1+h);
  29. if xf>0 then
  30. cgbj=1;
  31. else
  32. cgbj=0;
  33. break;
  34. end
  35. end
  36. if cgbj==1 then
  37. return true,xz1,yz1;
  38. end
  39. xtmp=xz1+1;
  40. end
  41. until xz1<0
  42. y1=yz+1;
  43. end
  44. until xz<0
  45. return false,-1,-1;
  46. end
  47. function main()
  48. f,x,y=mutifindcolor(0xDBEEFB,85,700,0,1023,590,10,10,{0xDBEEFA,0xDCEFFC,0xDDEEFB,0x1295E9,0xff0000});
  49. if f then
  50. click(x,y);
  51. else
  52. notifyMessage("沒找到!");
  53. mSleep(2000);
  54. end
  55. end
  56. function click(x,y)
  57. touchDown(0, x, y);
  58. mSleep(90);
  59. touchUp(0);
  60. end

深思君為你解答(www.sense.com.cn)


推薦閱讀:
相關文章