Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

PixelSearch - dwa pixele w określonej odległości


Rekomendowane odpowiedzi

Opublikowano

Witam,

Potrzebuje mały skrypt na bazie polecenia PixelSearch który rozpozna na ekranie dwa takie same pixele oddalone od siebie o 20pixeli, i jeśli taka sytuacja będzie na ekranie to kliknie w jeden z nich, na małej ilustracji przedstawiam o co mi chodzi.

 

post-1514570-0-32519900-1467701789_thumb.png

Opublikowano

Twój kod ma pewną wadę, która może go dyskwalifikować. Skończy on przeszukiwanie zadanego obszaru nawet gdy wykryty punkt nie będzie miał swojej pary. A przecież dalej może być punkt o takim samy kolorze, ale posiadający parę.

W zasadzie cały obszar trzeba by sprawdzać za pomocą funkcji PixelGetColor, a przeszukiwanie zakończyć po znalezieniu punktu o wymaganym kolorze i posiadającym parę, lub na końcu przeszukiwanego obszaru.

Niestety dla większych obszarów przeszukiwania może być to dość czasochłonne.

Local $iPixelColor = 0xFF0000
Local $iXP = 0, $iXK = 20, $iYP = 0, $iYK = 20

For $j = $iYP To $iYK
   For $i = $iXP To $iXK
      If PixelGetColor($i, $j) = $iPixelColor And PixelGetColor($i, $j+20) = $iPixelColor Then
         MouseClick("left", $i, $j)
         ExitLoop 2
      EndIf
   Next
Next

Powyższy kod wykonuje się na moim komputerze ok. 8s, a to tylko 441 pikseli.

 

Można by pokombinować z UDF'em FastFind, który jest podobno o wiele szybszy, ale nie próbowałem tego.

Jak znajdę trochę czasu to może popróbuję.

Opublikowano

Zmobilizowałem się i przetestowałem tego Fast Finda. Wzrost wydajności jest szokujący!

#include "FastFind.au3"

Local $iPixelColor = 0xFF0000
Local $iXP = 0, $iXK = 100, $iYP = 0, $iYK = 100

FFSnapShot($iXP, $iYP, $iXK, $iYK)

For $j = $iYP To $iYK
   For $i = $iXP To $iXK
      If FFGetPixel($i, $j) = $iPixelColor And FFGetPixel($i, $j+20) = $iPixelColor Then
	 MouseClick("left", $i, $j)
	 ExitLoop 2
      EndIf
   Next
Next

Powyższe przeszukanie trwa zaledwie ok. 0,4 sekundy, a teraz to ponad 10 000 pikseli.

To już chyba się nada do wyszukiwania parek pikseli.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...