2016-04-13 20 views
1

私は特定の16進数の色が特定のピクセル上にあるときにマウスを移動するためのコードを実行するなどのボットスクリプトを作成しようとしています。 1秒ごとに同じpngファイルに更新し、pngファイルの画像を更新します。私はそれが更新されているかどうか私は見ることができるので、コンソールにピクセルコードの印刷のための16進数の色を持っています。それはそれを更新することはありません。 iveはこのスクリプトを多くの方法で書こうとしましたが、悲しいことに私はあなたに見せたいバージョンを1つしか持っていませんが、私が達成しようとしていたことを理解することができます。 Python上の私は2.7 btwです。あなたのすべての時間をありがとう!python autopy problems/confusion

import autopy 
from time import sleep 

color_grabber = hex(autopy.bitmap.Bitmap.open("screen1.png").get_color(292,115)) 


def color_checker(): 
    global color_grabber 
    color_grabber = color_grabber 
    return 

def mouse_move_click(): 
    autopy.mouse.smooth_move(433,320) 
    autopy.mouse.click() 

def screen_grab(): 
    autopy.bitmap.capture_screen().save("screen1.png") 

def the_ifs(mouse_move_click): 
    if color_checker == "0xffcb05": 
     mouse_move_click() 

while 1==1: 
    sleep(1) 
    screen_grab() 
    color_checker() 
    the_ifs(mouse_move_click) 
    print color_grabber 

答えて

0

私はあなたの問題がcolor_grabberをどのように使用しているのかと考えています。 color_grabber = color_grabberとは何もしません。あなたのコードで何が起こっているのかは、それを実行すると、インポート後にcolor_grabberという値をイメージの色に定義するということです。 whileループが実行され、そのループでcolor_checkerが呼び出されます。この関数は、グローバル名前空間から変数color_grabberを取り込み、その変数をそれ自身と同じに設定します。最初にcolor_grabberを定義するために使用したコマンドを再実行していません。色の値を保存するだけで、色の値は変更されません。

mouse_move_click関数の呼び出し方法にも問題があります。実際には必要ないので、関数名を渡す必要はありません。しかし、あなたの関数(戻り値ではなく関数自体)と16進コードを比較しているチェックcolor_checker == "0xffcb05"も実行しました。それはあなたに良いことではありません。あなたは色を比較したい。解決策は、色をthe_ifsに渡し、その色を使って16進コードと比較することです。私は注意する必要がありますthe_ifsを独自の関数にする必要はありません。あなたのwhileループにif文を入れるだけです。私はあなたがそれを持っていた方法を残しました。

あなたが欲しいのは、このようなものです。

import autopy 
from time import sleep 

def color_checker(): 
    color_grabber = hex(autopy.bitmap.Bitmap.open("screen1.png").get_color(292,115)) 
    return color_grabber 

def mouse_move_click(): 
    autopy.mouse.smooth_move(433,320) 
    autopy.mouse.click() 

def screen_grab(): 
    autopy.bitmap.capture_screen().save("screen1.png") 

def the_ifs(color): 
    if color == "0xffcb05": 
     mouse_move_click() 

while 1==1: 
    sleep(1) 
    screen_grab() 
    color = color_checker() 
    the_ifs(color) 
    print color 

私はこのコードを自分で実行していないため、動作する保証はできませんが、それはすべきだと思います。

+0

ありがとうございます!!!!!私はこのサイトに新しい私はあなたに代理人を与えることができる方法はありますか? – thatsyntaxerrorguy

+0

これは現在更新中です。 – thatsyntaxerrorguy

+0

何らかの理由でthe_ifs/mouse_move_click関数はアクティブではなく、正しい16進数のカラーコードが満たされていると確信しています.... – thatsyntaxerrorguy

1
from autopy.mouse import LEFT_BUTTON 
autopy.mouse.click(LEFT_BUTTON) 
autopy.mouse.toggle(True, LEFT_BUTTON) 
autopy.mouse.toggle(False, LEFT_BUTTON) 

クリックし、私は他の人のコードでこれを行う必要性を参照してください、私は、Windows 7上でテストするときclick.Inの事実の後に上下に使用したい理由を私は理解していないが、効果的です非常に正確ではない、私の操作にもっと下のように感じる

+0

也许这些操作之間还要要一点点延迟(少し遅れが必要かもしれません) –

関連する問題