이거로 3일정도 계속 찾아보고 시도하다 너무 스트레스 받아서 질문글을 올립니다^_T..
제가 하고싶은 건 대략 10초정도 일정 이미지를 찾다가, 찾아진다면 다음 이미지를 찾고, 못찾아진다면 그냥 그 아래 스크립트로 가게끔 하고싶습니다
참고한 게시글은
https://tailstar.net/autohotkey/9382218
https://tailstar.net/autohotkey/8512015
이 두곳이랑 구글에서 검색해서 나온 것들이구요8ㅅ8..
두곳에 나와있는 스크립트를 거의 그대로 사용했습니다ㅠ_ㅠ
F2::
loop
{
~~~~~~~~~~~~~~~~~~~~~~~~
~~~~제가짜놓은스크립트~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~
startTime:=A_TickCount
loop
{
ImageSearch,vx,vy, 0, 0, A_ScreenWidth, A_ScreenHeight, *50 *transwhite *0 A.png
If errorlevel = 0 ;찾았을 경우
{
ImageSearch,vx,vy, 0, 0, A_ScreenWidth, A_ScreenHeight, *50 *transwhite *0 B.png
IF ErrorLevel = 0 ;찾았을 경우
{
sleep, 400
break
}
if (A_TickCount = startTime >= 10000) ;10초간 찾기
break
}
}
If errorlevel = 1 ;못찾았을 경우
{
sleep 100
break
}
~~~~~~~~~~~~~~~~~~~~~~~~
~~~~제가짜놓은스크립트~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~
}
이런식으로 해봤구요(제가 초보자라 아무렇게나 검색해서 집어넣고 수정하고 하고 있습니다ㅠㅠ)
결과는 아예 가동이 안되더라구요.. 딱 이 부분만 넘기고 파일이 실행됩니다ㅠㅠ
원래는 못찾았는데도 찾았다고 뜨거나 그래서 이래저래 계속 수정해보고 검색해보고 했는데ㅠㅠ 현재는 아예 안됩니다..
그래서 아예 새 파일로 만들어서 실행되면 붙여넣자는 마음에 이래저래 검색해서
F2::
startTime:=A_TickCount
loop
{
Imagesearch, ax, ay, 0, 0, 890, 890, *20 A.PNG
If errorlevel = 0
{
MsgBox, 찾았다
Sleep 100
if (A_TickCount = startTime >= 10000)
break
}
}
If errorlevel = 1
{
MsgBox, 못찾았다
sleep 100
}
이나
F2::
startTime:=A_TickCount ; <<--startTime에 시간을 기록
loop
{
if (A_TickCount = startTime >= 10000) ;;기준으로 10초 뒤에 루프탈출 하라 (1000단위가 1초)
{
break
}
Imagesearch, oX, oY, 1, 1, A_ScreenWidth, A_ScreenHeight, *50 A.PNG
If ( ErrorLevel = 0)
{
msgbox, 찾앗다
break
}
else if ( ErrorLevel = 1)
{
msgbox, 못찾았다 ㅠㅠ
break
}
}
혹은
F2::
startTime := A_TickCount ; 시작시간 기록
loop
{
ImageSearch,vx,vy, 0, 0, 890, 1150, *transwhite *0 A.PNG
if !errorlevel
MsgBox, 찾았다
break ; 루프끝내기
if( A_TickCount - startTime >= 30000 ) ; 시작한지 30초가 경과됐으면
MsgBox, 못찾았다
break ; 루프끝내기
}
등등..
이런식으로 새로 파일을 만들어서 되는지 해보고, 되면 원래 파일에 붙여넣으려고 했는데
이렇게 따로 파일을 만들어도 즉각즉각 찾는 건 되는데, 못찾았을 경우에 일정 시간동안 찾은다음에 못찾았다고 하는 게 아니고 바로바로 "못찾았다"라고 뜨더라구요ㅠㅠ(미칠 지경입니다..)
당연히 아예 수정해달라는 말이 아닙니다8ㅅ8..
혹시 보시고 어느쪽이 문제인지 아신다면 조금이라도 조언을 해주십사 찾아왔습니다ㅠㅠ 그럼 늦은 새벽에 고맙습니다ㅠㅠ...!
if( A_TickCount - startTime >= 30000 ) ; 시작한지 30초가 경과됐으면
MsgBox, 못찾았다
break ; 루프끝내기
if 문 다음을 { } 대괄호로 묶어주지 않으면 if 다음 첫줄만 if문의 영향을 받고 두번재 줄부터는 if문에 걸린 조건과 관계 없이 실행이됩니다.
때문에 위와 같이 작성하시면 if문 조건을 만족하지 않더라도 바로 break가 실행이 되어 loop를 탈출하게되죵..
if( A_TickCount - startTime >= 30000 ) ; 시작한지 30초가 경과됐으면
{
MsgBox, 못찾았다
break ; 루프끝내기
}
요렇게 묶어보세요.
그리고 if (A_TickCount = startTime >= 10000) ;;기준으로 10초 뒤에 루프탈출 하라 (1000단위가 1초) 요부분은
if (A_TickCount >= startTime + 10000) ;;기준으로 10초 뒤에 루프탈출 하라 (1000단위가 1초)
이렇게 되는게 맞습니다.