函数:getColorRGB 获取屏幕某点颜色值

函数名称:获取颜色 RGB、取色

函数功能:获取某一点的颜色 RGB 值并返回

函数方法

color_r, color_g, color_b = getColorRGB(x,y);

参数 类型 必填 说明
x number 将获取颜色值的屏幕横坐标
y number 将获取颜色值的屏幕纵坐标
返回值 类型 说明
color_r, color_g, color_b number 该点颜色的 R,G,B 值

函数用例

r,g,b = getColorRGB(100,100);
--转换成十六进制颜色值
dialog(string.format("%#x",r)..string.format("%x",g)..string.format("%x",b))

如果某点的颜色与某颜色相似则点击

r,g,b = getColorRGB(100,100);    --获取(100, 100)的颜色值,赋值给 color 变量
if r > 200 and g < 150 then         --如果红色强度大于 200,绿色强度小于 150
    touchDown(100,100);             --那么点击该点
    mSleep(30);
    touchUp(100,100);
end

封装一个单点模糊比色函数

function isColor(x,y,c,s)   --封装函数,函数名 isColor
    local fl,abs = math.floor,math.abs
    s = fl(0xff*(100-s)*0.01)
    local r,g,b = fl(c/0x10000),fl(c%0x10000/0x100),fl(c%0x100)
    local rr,gg,bb = getColorRGB(x,y)
    if abs(r-rr)<s and abs(g-gg)<s and abs(b-bb)<s then
        return true
    end
end
--下面为函数用法
if isColor(963,  961, 0x7b593f,90) then --90 为模糊值,值越大要求的精确度越高
    touchDown(963, 961)
    mSleep(50)
    touchUp(963, 961)
end

多点模糊比色

在实际游戏脚本制作中,很多界面单靠 1 个点不容易进行准确的判断,这里封装一个配合 TABLE 使用的多点模糊比色函数来实现精确判断:

function multiColor(array,s)
    s = math.floor(0xff*(100-s)*0.01)
    keepScreen(true)
    for var = 1, #array do
        local lr,lg,lb = getColorRGB(array[var][1],array[var][2])
        local r = math.floor(array[var][3]/0x10000)
        local g = math.floor(array[var][3]%0x10000/0x100)
        local b = math.floor(array[var][3]%0x100)
        if math.abs(lr-r) > s or math.abs(lg-g) > s or math.abs(lb-b) > s then
            keepScreen(false)
            return false
        end
    end
    keepScreen(false)
    return true
end

--用法
g_t_Table = {
    { 1962,   52, 0xefdccf},
    { 2150,   50, 0xefd8d0},
    { 1964,   76, 0xe9d1c5},
    { 2152,   74, 0xefdcd1},
    { 2122,   62, 0xf1ddd1},
    { 2146, 1080, 0x893824},
    { 1840, 1082, 0x593724},
}
if multiColor(g_t_Table,90) then
    touchDown(100,100)
    mSleep(50)
    touchUp(100,100)
end

名词解析

  • R,G,B 值,即代表红(Red)、绿(Green)、蓝(Blue)三个通道的颜色强度。

  • 整型,指的是可以用十、十六、八进制指定的数据类型。使用十六进制符号,必须加上 0x。

  • 赋值是 Lua 基本语法,操作符为 "="(一个等号)。

  • 等于是 Lua 基本语法,属于条件控制,操作符为 "=="(两个等号)。新手常常将等于写作赋值,从而导致编译出现错误。

注意事项

  • getColor 与 getColorRGB 的作用是一样的,只不过前者返回单变量,后者返回 R,G,B 三个变量。

  • 如直接使用例子中的代码进行测试,请在全部代码之前,加入 2 ~ 3 秒延迟,或者使用循环语句。 因为脚本开始运行时,可能会出现弹窗窗口提示遮盖在前台,影响获取颜色。

  • 特别注意,getColor 函数获得的颜色值十六进制文本中,实际顺序为 R G B。

  • 新手找色可使用触动精灵函数扩展库中的单点比色多点比色函数,更加简单方便。

参考资料 如何获取屏幕上某点的颜色

  • 在你想在设备上截图,iOS 同时按下电源键Home 键,安卓为 电源键音量键-即可进行截图(此时屏幕会闪一下)。

  • 推荐使用触动精灵编辑器,可方便的获取所需坐标点的颜色信息。

  • 常见颜色表:http://www.114la.com/other/rgb.htm

  • 雷电 9 系统模拟器分辨率为平板版时使用函数:getScreenSize 获取的屏幕宽高相反,获取到的宽度实际为屏幕高度,获取的高度实际为屏幕宽度,其他模拟器获取的屏幕宽高为实际屏幕宽高。

Copyright 北京帮你玩科技有限公司 2023 all right reserved,powered by Gitbook该文章修订时间: 2024-03-06 17:50:18

results matching ""

    No results matching ""