Buscar colores en varios puntos mediante el modo de desviación de color (screen.find_color)
Declaración
coordenada_x, coordenada_y = screen.find_color({
[find_all = buscar_todos,]
[max_results = máximo_de_resultados,]
[max_miss = máximo_de_fallos,]
{coordenada_x_inicial, coordenada_y_inicial, {color_inicial[, desviación_inicial]}},
{coordenada_x_de_desplazamiento*, coordenada_y_de_desplazamiento*, {color_de_desplazamiento*, desviación_de_desplazamiento*}},
{coordenada_x_de_desplazamiento*, coordenada_y_de_desplazamiento*, {color_de_desplazamiento*, desviación_de_desplazamiento*}},
...
} [, izquierda, arriba, derecha, abajo ])
Parámetros
- buscar todos
Tipo booleano, parámetro opcional; si esta etiqueta se establece en true, devuelve una tabla con todas las posiciones coincidentes dentro del área, con el formato{{x1, y1}, {x2, y2}, ...}; el valor predeterminado es false - máximo de resultados
Tipo entero, parámetro opcional; cuando la etiquetafind_all(buscar todos) se establece en true, indica el número máximo de resultados devueltos. Puede establecerse como máximo en 1000; el valor predeterminado es 100 - máximo de fallos
Tipo entero, parámetro opcional; cantidad máxima de puntos que pueden no coincidir. El valor predeterminado es 0, por lo que deben coincidir todos los puntos - coordenada x inicial, coordenada y inicial
Tipo entero, coordenadas iniciales. No limitan la búsqueda de colores a un único punto; solo proporcionan una coordenada relativa para las posiciones de desplazamiento. Si no se necesitan desplazamientos, se puede usar 0, 0 - color inicial
Tipo entero, color del punto que se buscará - desviación inicial
Tipo entero, desviación máxima del color que se buscará (o desviación de color); un valor superior a 0xff000000 activa el modo de coincidencia inversa - coordenada x de desplazamiento*, coordenada y de desplazamiento*
Tipo entero, coordenadas de una posición de desplazamiento - color de desplazamiento*
Tipo entero, color que debe coincidir en la posición de desplazamiento - desviación de desplazamiento*
Tipo entero, desviación (o desviación de color) del color de la posición de desplazamiento; un valor superior a 0xff000000 activa el modo de coincidencia inversa - izquierda, arriba, derecha, abajo
Tipo entero, parámetro opcional; área de búsqueda. El valor predeterminado es pantalla completa
Valores devueltos
- coordenada x, coordenada y
Tipo entero, coordenadas del primer color del patrón coincidente; si la búsqueda falla, devuelve -1, -1
Descripción
Busca mediante el modo de desviación de color (o desviación) y obtiene la posición del primer patrón de colores multipunto completamente coincidente dentro del área
Los parámetros de coordenadas y los valores devueltos de esta función están condicionados por el sistema de coordenadas inicializado mediantescreen.init
La desviación de color (o desviación) suele usarse para representar un intervalo de colores. Un color con una desviación de color incluye todos los colores dentro de los intervalos de desviación de sus componentes rojo, verde y azul.
Cuando la desviación de color de 0x456789 es 0x123456, significa que los intervalos positivos y negativos son 0x12 para el rojo, 0x34 para el verde y 0x56 para el azul.
Es decir, el intervalo rojo es 0x45 ± 0x12, el verde es 0x67 ± 0x34 y el azul es 0x89 ± 0x56, como se muestra en la tabla siguiente.
| Negativo | Positivo |
|---|---|
| 0x45 - 0x12 = 0x33 | 0x45 + 0x12 = 0x57 |
| 0x67 - 0x34 = 0x33 | 0x67 + 0x34 = 0x9B |
| 0x89 - 0x56 = 0x33 | 0x89 + 0x56 = 0xDF |
La combinación
\{0x456789, 0x123456\}indicada arriba representa todos los colores del intervalo de 0x333333 a 0x579BDF
Los números que comienzan por 0x están expresados en hexadecimal (¿Qué es un número hexadecimal?)
Ejemplo
x, y = screen.find_color({
{ 0, 0, {0xec1c23, 0x000000}},
{ 12, -3, {0xffffff, 0x101010}},
{ 5, -18, {0x00adee, 0x123456}},
{ -1, -10, {0xffc823, 0x101001}},
{ 2, -34, {0xa78217, 0x101001}},
{ 12, -55, {0xd0d2d2, 0x101001}},
}, 0, 0, 100, 100)
--
--[[
En el área cuya esquina superior izquierda es 0, 0 y la inferior derecha es 100, 100, encuentra el primer punto cuya coincidencia con 0xec1c23 sea exacta (desviación de color 0),
cuyo punto relativo (12, -3) tenga un color con una desviación inferior a 0x101010 respecto a 0xffffff,
cuyo punto relativo (5, -18) tenga un color con una desviación inferior a 0x123456 respecto a 0x00adee,
y así sucesivamente, hasta que todos los puntos coincidan
--]]
--
-- Código equivalente:
--
x, y = screen.find_color({
{ 509, 488, {0xec1c23, 0x000000}},
{ 521, 485, {0xffffff, 0x101010}},
{ 514, 470, {0x00adee, 0x123456}},
{ 508, 478, {0xffc823, 0x101001}},
{ 511, 454, {0xa78217, 0x101001}},
{ 521, 433, {0xd0d2d2, 0x101001}},
}, 0, 0, 100, 100)
--
--[[
En el área cuya esquina superior izquierda es 0, 0 y la inferior derecha es 100, 100, encuentra el primer punto cuya coincidencia con 0xec1c23 sea exacta (desviación de color 0),
cuyo punto relativo (521-509, 485-488) tenga un color con una desviación inferior a 0x101010 respecto a 0xffffff,
cuyo punto relativo (514-509, 470-488) tenga un color con una desviación inferior a 0x123456 respecto a 0x00adee,
y así sucesivamente, hasta que todos los puntos coincidan
--]]
--
-- Sin saltos de línea ni sangría, el efecto es este:
x, y = screen.find_color({ {0,0,{0xec1c23,0x000000} },{12,-3, {0xffffff,0x101010} },{5,-18, {0x00adee,0x123456} },{-1,-10,{0xffc823,0x101001} },{2,-34,{0xa78217,0x101001} },{12,-55,{0xd0d2d2,0x101001} }, },0,0,100,100)
--
x, y = screen.find_color({ -- Demostración de coincidencia inversa; se obtienen resultados al ejecutarla en la pantalla principal de un 5C
{ 516, 288, {0xffffff, 0x101010} },
{ 519, 286, {0xffffff, 0x101010} },
{ 521, 289, {0xffffff, 0x101010} },
{ 516, 296, {0xffffff, 0x101010} },
{ 522, 297, {0xffffff, 0x101010} },
{ 520, 295, {0xffffff, 0xff101010} }, -- Este punto solo coincide si la diferencia de su color con 0xffffff es superior a 0x101010; lo mismo se aplica a los siguientes
{ 515, 291, {0xffffff, 0xff101010} },
{ 518, 284, {0xffffff, 0xff101010} },
{ 523, 298, {0xffffff, 0xff101010} },
{ 514, 298, {0xffffff, 0xff101010} },
{ 514, 296, {0xffffff, 0xff101010} },
}) -- Si no se especifican los parámetros de área, busca en toda la pantalla
--
results = screen.find_color({ -- Demostración de coincidencia en un área con todos los resultados
{ 527, 278, {0xde1d26, 0x101010} },
{ 524, 285, {0x007aff, 0x101010} },
{ 555, 292, {0xe4ddc9, 0x101010} },
{ 536, 314, {0xffde02, 0x101010} },
{ 502, 291, {0xffde02, 0x101010} },
{ 502, 283, {0xe4ddc9, 0x101010} },
find_all = true, -- Con esta etiqueta se devuelve una tabla con todas las posiciones coincidentes del área, con el formato {{x1, y1}, {x2, y2}, ...}
}) -- Si no se especifican los parámetros de área, busca en toda la pantalla