Procedureの自作関数が上手く動作しない

こんばんは、UWSCを勉強していてどうしても分からないところがあったので質問させてください。 まず、作ろうとしているのは画像認識のみの簡単なプログラムです。 内容はこんなかんじです。 if chkimg(“img_1.bmp”) btn( left , click , g_img_x +50 , g_img_y +10 ) sleep( 2 ) elseif chkimg(“img_2.bmp”) btn( left , click , g_img_x +50 , g_img_y +10 ) sleep( 2 ) endif 120枚程度の画像の中からどれかがあった場合、クリック→スリープというものです。 ただ、画像に名前をある程度ルールを決めて付けており、そのジャンル毎にブロックを作って見やすくしています。また、後から頻繁に追加する予定があるのです。なので、if chkimg or or or…と並べるのは少し見づらくてあまり望んでおりません。 btn( left , click , g_img_x +50 , g_img_y +10 ) sleep( 2 ) そこで、↑の部分をloopという関数にしてコードをスッキリさせようとしたのですが、 if chkimg(“img_1.bmp”) loop elseif chkimg(“img_2.bmp”) loop endif Procedure loop btn( left , click , g_img_x +50 , g_img_y +10 ) sleep( 2 ) Fend ではどの画像にも反応しなくなりました。試しに、一つをloopからbtn…に戻したところその画像だけはクリックをするようになりました。 また、別のファイルで if chkimg(“img_1.bmp”) loop elseif chkimg(“img_2.bmp”) loop endif Procedure loop2 btn( left , click , g_img_x +50 , g_img_y +10 ) sleep( 2 ) if chkimg(“flag.bmp”) btn( left , click , g_img_x , g_img_y ) endif Fend のようにしている処理があり、これも動きませんでした。しかし、 btn( left , click , g_img_x +50 , g_img_y +10 ) sleep( 2 ) ↑の部分を除くと動くようになりました。 Procedureの後に直接btnを置くというのは仕様上動かないのでしょうか? 長くなりましたが、どうぞよろしくお願い致します。

関連情報:

  1. 繰り返しと条件分岐の組み合わせがうまくできない
  2. CHKIMG
  3. EXIT
  4. IFB
  5. CSSのボタンを押したい

このエントリーを含むはてなブックマーク Buzzurlにブックマーク Yahoo!ブックマークに登録

コメント

  1. z3z2w より:

    ごめんなさい。↑で改行やらタグを忘れておりました…。
    こんばんは、UWSCを勉強していてどうしても分からないところがあったので質問させてください。
    まず、作ろうとしているのは画像認識のみの簡単なプログラムです。 内容はこんなかんじです。

    if chkimg("img_1.bmp")
    	btn( left , click , g_img_x +50 , g_img_y +10 )
    	sleep( 2 )
    elseif chkimg("img_2.bmp")
    	btn( left , click , g_img_x +50 , g_img_y +10 )
    	sleep( 2 )
    elseif chkimg("img_3.bmp")
    	btn( left , click , g_img_x +50 , g_img_y +10 )
    	sleep( 2 )
    endif

    120枚程度の画像の中からどれかがあった場合、クリック→スリープというものです。
    ただ、画像に名前をある程度ルールを決めて付けており、そのジャンル毎にブロックを作って見やすくしています。
    また、後から頻繁に追加する予定があるのです。なので、if chkimg or or or…と並べるのは少し見づらくてあまり望んでおりません。

    btn( left , click , g_img_x +50 , g_img_y +10 )
    sleep( 2 )

    そこで、↑の部分をloopという関数にしてコードをスッキリさせようとしたのですが、

    if chkimg("img_1.bmp")
    	loop
    elseif chkimg("img_2.bmp")
    	loop
    elseif chkimg("img_3.bmp")
    	loop
    endif
    Procudure loop
    	btn( left , click , g_img_x +50 , g_img_y +10 )
    	sleep( 2 )
    Fend

    ではどの画像にも反応しなくなりましたが、試しに一つをloopからbtn…に戻したところその画像だけはクリックをするようになりました。
    また、別のファイルで

    if chkimg("img_1.bmp")
    	loop
    elseif chkimg("img_2.bmp")
    	loop
    elseif chkimg("img_3.bmp")
    	loop
    endif
    Procudure loop
    	btn( left , click , g_img_x +50 , g_img_y +10 )
    	sleep( 2 )
    	if chkimg("flag.bmp")
    		btn( left , click , g_img_x , g_img_y )
    	endif
    Fend

    のようにしている処理があり、これも動きませんでした。しかし、

    btn( left , click , g_img_x +50 , g_img_y +10 )
    sleep( 2 )

    ↑の部分を除くと動くようになりました。
    Procedureの後に直接btnを置くというのは仕様上動かないのでしょうか?
    長くなりましたが、どうぞよろしくお願い致します。

  2. mugicha より:

    g_img_xとg_img_yをCHKIMGで取得してないから。(少なくともProcedureの中では取得してない。自作関数の外で取得しているものとProcedureの中は別物)
    変数のスコープが違う。
    パラメータで渡す必要、グローバル変数に格納するなどコードを修正してみたらどうですかね?

    ifb  CHKIMG("1.bmp")
        print "g_img_x:" + g_img_x
        print "g_img_y:" + g_img_y
        loop_NG
        loop_OK(g_img_x,g_img_y)
    endif
    
    Procedure loop_NG
        print "プロシージャ内のg_img_x:" + g_img_x
        print "プロシージャ内のg_img_y:" + g_img_y
        btn( left , click , g_img_x +50 , g_img_y +10 )
        sleep(2)
    Fend
    
    Procedure loop_OK(x, y)
        print "パラメータx:" + x
        print "パラメータy:" + y
        btn( left , click , x +50 , y +10 )
        sleep(2)
    Fend
    
    • z3z2w より:

      mugicha様ありがとうございます。

      Procudure内のコードは文字列として置き換えられるものだと思っておりました。
      ご指摘の通りパラメータとしてg_img_x,yを引いてきたところ正常に動作しました。
      本当にありがとうございます!


このページの先頭へ