Sign in to follow this  
Followers 0
Juggernaut

Detection

14 posts in this topic

#1 ·  Posted (edited)

I have two pixel colors i am detecting. Is there a way to detect if Pixel1 is in a certain pixel range of pixel2?

Ive researched for so long, lol

And not pixel1 or 2 changing, just finding if theyre in a range of another

Edited by Juggernaut

Share this post


Link to post
Share on other sites



Hi Juggernaut,

1st Welcome to the AutoIt Forums! :idiot:

Some of the following tips may not apply to you, but it may make your life a bit easier here on the forum in the future.

CODE
  • Did you know that we have an awesome search feature?

    You can find many answers to your current questions, just by typing in the right search patterns.

  • A suggestion is to use the Advanced Search mode:

  • Type your specific search term in quotes.
  • Click the forum you want to search in (the one most likely to have your information would generally be the Example Script forum and or the General Help and Support Forum).
  • Click on "Search titles only" radio button.
  • Click perform search.
The above will help you narrow down your searches and prevent you from unneccesarily posting a new thread.

[*]Also, you should try to read the Sticky posts that are at the top of each of the AutoIt Forums you enter such as:

[*]Keep in mind, the help file will be your best friend, however you may find some of the tutorials written by some of our elite forum members helpful.

[*]Forum Etiquette:

  • Making a new thread:

    • Use the Search feature first to see if your question has already been answered.
    • Look in the help file as well before even thinking of posting (When what you want could be obtained by simply reading the help file, you don't generally get a good response from your AutoIt community).
    • Titles are very important here. 1 word titles or titles like "help me", "write something for me", "I'm a noob" etc... aren't tolerated.
    • Use common sense when creating a new thread.

      Ask yourself if the title is descriptive enough to even interest someone (preferably those that know what they are talking about) to even look at your thread, let alone reply in it.

    • Think about how it would show in the search feature if someone were to look for something just like you are looking for (think of the keywords you used yourself and obviously didn't find anything (because we know you used the search feature :) ) and use those types of keywords in your title as well).
  • Thread content:

    • Be descriptive with your query. (Make sure we actually know what you want to do).
    • Show you've made an effort in coding what you want (provide the reproducer code (generally no more than 50 lines as people lose interest in debugging someones script for free)).
    • Don't talk in ebonics. A lot of the forum members are adults, and a lot of them know how to help you, but talk like a child, you'll be treated as such.
    • Don't ask for help making keyloggers, spam (even if it's to do as a prank), or anything that can be thought of as malicious. You'll more than likely have the thread locked by a moderator, and take a bashing from your fellow AutoIt community.
    • When posting code, use code boxes. This can be accomplished by using [code ]<content here>[/code ] (No spaces between the brackets []).

      Using code boxes will keep the indentation and make it easier to read for others to help you.

  • Bumping your threads:

    • Use common courtesy here.

      Keep in mind every time you bump your thread to the top of the forum, you knock the other threads down a notch.

      Everyone posting for help has just as much right for their threads to get read as you do.

      Because of that, do not bump your post more than once in a 24 hour period.

      A Bump is simply posting in your thread with nothing that pertains to your query with the sole purpose of moving it up.

      Deleting previous bumps, and posting new ones is not tolerated, and the moderators can find those deletions, so do yourself a favor and don't cross that line >_< .

  • Rude or obnoxious content:

    This falls pretty much under the common sense thing. If you use it (common sense) before posting, you won't have issues.

    • Don't use foul language, remember, a lot of the community is at work when they read these threads.
    • Don't provoke or instigate an argument with someone.
  • Double Posting:

    • It's understood that sometimes there's a lag in the system, and sometimes people don't see their post go up right aways so they post again.

      If this happens to you, simply notify a moderator with the report feature in the post, and politely ask them to delete it.

    • If you're just creating another topic because your original topic is not being answered the way you want or at all, this is not tolerated. You could lose your posting privileges all together over it.
  • Non-English languages

    • If English is not your primary language, please make an attempt to interpret (yourself or online) and post that interpretation.

      We have wonderful users from around the world, so after you've done your post in English, back it up with your question also in your native tongue (You may find your answer much quicker using both).

That's it for now, I hope you have a wonderful learning experience, and hope to see you contribute to the community as your knowledge grows.

Share this post


Link to post
Share on other sites

Community on patrol hits again!

@Juggernaut

not sure if this is what you mean but you could use if not pixel2>pixel1+500 and not pixel2>pixel1-500 i am kindof tired but i think that would make sure its in a range of 1000? is that what you meant?


[quote name='PsaltyDS' post='635433' date='Jan 27 2009, 07:04 AM']Larry is a mass murderer?! It's always the quiet, clean cut, bald guys... [/quote]

Share this post


Link to post
Share on other sites

Well yes, i've tried that though. Basically, what I want it to do, is If Pixel1 is in a range of Pixel2, press a button. I have this so far, but this is just me fooling around.

$tile_attack = PixelSearch(0,0,1024,768,0x317131)
$tile_player = PixelSearch(0,0,1024,768,0x94AEEF)
While 1=1
    if $tile_attack = $tile_player - 50 Then
send("s")
EndIf
Wend

Share this post


Link to post
Share on other sites

Guess i can't edit...

Anyways, I've just tried this, but STILL not working. I've been trying to figure this out for hours..

$pixelSearch=PixelSearch(0,0,@DesktopWidth,@DesktopHeight,"0x317131");target
$pixelSearchPlayer=PixelSearch(0,0,@DesktopWidth,@DesktopHeight,"0x94AEEFF");player
While 1
If $pixelsearchplayer = $pixelsearch + 50 Then
Send("{SPACE}")
EndIf

If $pixelsearchplayer = $pixelsearch - 50 then
Send("{SPACE}")
EndIf
Wend

Share this post


Link to post
Share on other sites

Try something like

$pixelSearch = PixelSearch(0, 0, @DesktopWidth, @DesktopHeight, "0x317131");target
$pixelSearchPlayer = PixelSearch(0, 0, @DesktopWidth, @DesktopHeight, "0x94AEEFF");player
While 1
    Switch $pixelSearchPlayer
        Case $pixelSearch -50 To $pixelSearch +50
            Send("{SPACE}")
    EndSwitch
WEnd

Share this post


Link to post
Share on other sites

Try something like

$pixelSearch = PixelSearch(0, 0, @DesktopWidth, @DesktopHeight, "0x317131");target
$pixelSearchPlayer = PixelSearch(0, 0, @DesktopWidth, @DesktopHeight, "0x94AEEFF");player
While 1
    Switch $pixelSearchPlayer
        Case $pixelSearch -50 To $pixelSearch +50
            Send("{SPACE}")
    EndSwitch
WEnd
um... how in the WORLD would that work? PixelSearch returns an array!!

Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.

Share this post


Link to post
Share on other sites

um... how in the WORLD would that work? PixelSearch returns an array!!

Sorry, I totaly overlooked the PixelSearch. Maybe some along these lines (untested)
$pixelSearch = PixelSearch(0, 0, @DesktopWidth, @DesktopHeight, "0x317131");target
$pixelSearchPlayer = PixelSearch(0, 0, @DesktopWidth, @DesktopHeight, "0x94AEEFF");player
While 1
    Switch $pixelSearchPlayer[0]
        Case $pixelSearch[0] -50 To $pixelSearch[0] +50
            Switch $pixelSearchPlayer[1]
                Case $pixelSearch[1] -50 To $pixelSearch[1] +50
                    Send("{SPACE}")
            EndSwitch
    EndSwitch
WEnd

Share this post


Link to post
Share on other sites

Hm. I get an error with that code, saying subscript used with non-array variable.

Share this post


Link to post
Share on other sites

Anyone help me out? Im all out of ideas ;[

Share this post


Link to post
Share on other sites

#11 ·  Posted (edited)

Okay, maybe some of you don't understand what i am looking to do. I've made a diagram explaining it.

Now, the RED dot is the target, and the BLUE dot is me.

I am looking to check when the RED AND BLUE dot are in a certain range of each other, and then do actions accordingly.

Also, I just tried this, im not sure if im getting closer or not though, since it doesn't work.

Global $target_posX, $target_posY, $player_posX, $player_posY

$pixelSearch = PixelSearch(0, 0, @DesktopWidth, @DesktopHeight, 0x999933);target
$pixelSearchPlayer = PixelSearch(0, 0, @DesktopWidth, @DesktopHeight, 0xD6FFCA);player

While 1
if isArray($pixelSearchPlayer) Then
$target_posX = $pixelSearchPlayer[0]
$target_posY = $pixelSearchPlayer[1]
$player_posX = $pixelSearch[0]
$player_posY = $pixelSearch[1]
if ($target_posX = $player_posX +50) Or if ($target_posX = $player_posX -50) Then
    send("{SPACE}")
EndIf
if ($target_posy = $player_posy +50) Or if ($target_posy = $player_posy -50) Then
    send("{SPACE}")
EndIf
EndIf
WEnd

Think anyone can help me out? :)

Posted Image

Edited by Juggernaut

Share this post


Link to post
Share on other sites

This test code works for me, you will probably need to adapt it to your needs (more error checking probably required). I've put PixelSearch in the While loop because I was detecting a moveable player.

;~ $target = 0xCA026E
;~ $player = 0x1503FF
$target = 0x999933
$player = 0xD6FFCA
$iPixRange = 50
HotKeySet("{ESC}", "Quit")
While 1
    Sleep(10)
    $pixelSearch = PixelSearch(0, 0, @DesktopWidth, @DesktopHeight, $target);target
    If @error Then ContinueLoop
    ConsoleWrite("found target" & @LF)
    $pixelSearchPlayer = PixelSearch(0, 0, @DesktopWidth, @DesktopHeight, $player);player
    If @error Then ContinueLoop
    ConsoleWrite("found player" & @LF)
    Switch $pixelSearchPlayer[0]
        Case $pixelSearch[0] -$iPixRange To $pixelSearch[0] +$iPixRange
            Switch $pixelSearchPlayer[1]
                Case $pixelSearch[1] -$iPixRange To $pixelSearch[1] +$iPixRange
                ;Send("{SPACE}")
                    ConsoleWrite("in range" & @LF)
                    Sleep(500)
            EndSwitch
    EndSwitch
WEnd
Func Quit()
    Exit
EndFunc

Share this post


Link to post
Share on other sites

#13 ·  Posted (edited)

Aha, thank you SO much. :)

Edit:

Hm, its great, exactly what i was looking for, thanks again. But a small error i haven't been able to figure out. Sometimes (randomly) when the player is near the target, it doesn't trigger the selected key, im not quite sure why. Ive been playing around with it. Also, its really laggy for some reason. Any ideas?

Edited by Juggernaut

Share this post


Link to post
Share on other sites

#14 ·  Posted (edited)

Aha, thank you SO much. :)

Your welcome

Hm, its great, exactly what i was looking for, thanks again. But a small error i haven't been able to figure out. Sometimes (randomly) when the player is near the target, it doesn't trigger the selected key, im not quite sure why.

If you are using the Send command, try replacing the line
ConsoleWrite("in range" & @LF)
with
Beep(2000, 100)
to tell if its a problem with PixelSearch code or with Send when the target is within range. Send can be unreliable, try adjusting Opt("SendKeyDelay",...) and/or Opt("SendKeyDownDelay",...) .

Ive been playing around with it. Also, its really laggy for some reason. Any ideas?

PixelSearch is cpu intensive, if possible, use a smaller pixelsearch area rather than the whole screen and/or (assuming the target is much greater than an a few pixels square) try adjusting PixelSearch step to say 4 or more. Try adjusting or removing the Sleep(10) Edited by picaxe

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0