lidmt님이 게시판에 작성하신 부분인데요.
그냥 보면 도무지 이해가 안되어 , 함수부분들 글좀 찾아보다가
일반적으로 쓰는 vx,vy x,y 등으로 일단 바꿔서 제 개인적으로 좀더 이해하려고 애써봤습니다.
일반적 함수형태는,
imageSearcher(ByRef vx, ByRef vy, X, Y, w, h, img) 이런식으로,,
함수이름(변수, 변수, 변수 ... ){ }? 이런 형태로, 함수이름은 자기맘대로편한것 쓰면되구요.
이 함수선언부분은 본문 스크립트에 영향을 주지 않는 개별공간이라 보면 되겠네요. 아무대나 넣어도
스크립트 순서 진행에 영향을 주지 않는다는거죠. 무시하는거에요.
아무대나 함수선언해두고 , 불러올때는 imageSearcher(vx, vy, X, Y, w, h, "모험하기.png") 이런식으로 불러옵니다.
불러온다기보다 함수선언한데로 갔다가 진행하고 다시오는건데요.
제가 볼땐 gosub랑 흡사하네요. 거의차이없는듯해요.
imageSearcher(ByRef vx, ByRef vy, X, Y, w, h, img){?? ; 함수 선언부 byref vx는 약간 이해안가는부분인데요.
; 함수호출시?함수에 대입대는 변수에 간섭을 가능하게 해줍니다. 라고 나오는데 암튼 byref를 안쓰면,
; 본스크립에서 vx,vy값을 가지오지못하더군요. byref를 쓰면 영향을 주는것 같네요.
ImageSearch, vx1, vy1, X, Y, w, h, *50 img\%img%? ; 함수내의 스크립트진행, 일반적 이미지서치그대로,
if(ErrorLevel = 0){ ;이미지 있다면
vx := vx1 ; 결과 좌표인 vx1,vy1 좌표를 vx , vy에 각각 넣음, 왜 두번일하는지 조금 헷갈리네요.
vy := vy1
return true ; 함수는 return을 하면 그 값을 최종적으로 반환합니다.? 이함수는 최종 true라는 값을 내뱉죠.
}
else if (ErrorLevel = 1){? ;없다면
return false? ; false 값을 반환
}
}
; 여기까지 imagesearcher 이라는 함수가 끝나는데 ,
; 함수선언부자체가 본문스크립에 영향주지 않아서, return도 필요없어요
; 아래는 imageclick라는 또다른 함수 선언부에요. 이부분은 위랑 비슷하니 생략
imageClick(X, Y, vx, vy,지니모션){
x:=vx-X-7 +5
y:=vy-Y-30 + 5
N:=x|y<<16
PostMessage, 0x201, 1, %N%, , %지니모션%
PostMessage, 0x202, 0, %N%, , %지니모션%
sleep, 500
}
;이곳에서부터 스크립 본문시작 입니다. 위 함수선언부는 다 무시되고 여기 진행되는거죠.
;세밀하게 뭐뭐 빠졋고 그런건 신경쓰지마세요. 대충 부분부분 가져온거라서요.
;일반적인 스크립트 부분 설명 생략
F1::
CoordMode, Pixel, Screen
WinGetActiveTitle, 지니모션
WinGetPos, X, Y, width, height, %지니모션%
w := X+width
h := Y+height
result := imageSearcher(vx, vy, X, Y, w, h, "모험하기.png") ; 이곳이 함수를 호출하는곳인데요.
;vx,vy값은 함수내에서 찾는거라 값이 현재없겟죠. 일단 각 값을 가지고 위 함수로 그대로 대입합니다.
if(result=true){? ; 위 함수내에서 이미지찾았으면, result가 true이기 땜에 , 이렇다면
imageClick(X, Y, vx, vy, 지니모션) ; 또다른 imageclick함수를 호출해서 클릭작동...
}
;나머지 다른 이미지 찾는것들도 이런식으로 해주네요.. 아래 보시면 바꿀건 이미지이름뿐이네요.
sleep 500
result := imageSearcher(vx, vy, X, Y, w, h, "아레나.png") ; 이미지 이름만바꿔주면, 이미지찾으면 클릭까지작동.
if(result=true){
imageClick(X, Y, vx, vy, 지니모션)
}
return
대충 이해한데로 주석했는데요.
vx,vy부분, byref부분이 좀 애매하네요.?
global함수지정도 있던데 , global 변수이름 하면 , 함수내에까지 영향을 줘서 변수를 같이사용가능하더군요.
근데 , 위와 같이 할경우 ,
gosub쓰는게 훨 보기 더 좋은거 같아요.
ImageSearch, vx, vy, %x%, %y%, %w%, %h%,?*50 img\탐험성공.png
if (errorlevel=0){
gosub,클릭
sleep 200
}
이런식으로 쓰는게 더 문장도 짧고 간결해보이네요.
아무래도 함수가 이런 진행에 쓰는건 아니고 , 더 복잡한것에 사용해서인지 모르겟어요.
제가 잘못 이해한 부분은 댓글로 짚어주시면 감사하겠습니다...?
imageClick(X, Y, vx, vy,지니모션){
x:=vx-X-7 +5
y:=vy-Y-30 + 5
N:=x|y<<16
PostMessage, 0x201, 1, %N%, , %지니모션%
PostMessage, 0x202, 0, %N%, , %지니모션%
sleep, 500
}
이렇게 함수를 짜셨는데 이거 사용하실때
imageClick(X, Y, vx, vy,지니모션) <-이런식으로 값넣어서 쓰자나요, 근데 X,Y, 지니모션은 프로그램 실행시 고정값이라 계속 넘겨줄필요가 없자나요. 그래서 제가 그냥 global 써서 함수내에 변수 집어넣어서 지정값 그대로 가져다 쓰게 한거에요.?imageClick( vx, vy) 이런식으로 값두개만 넘기면 되니까요. 그러면 실제 사용이
ImageSearch, vx, vy, %x%, %y%, %w%, %h%,?*50 img\탐험성공.png
if (errorlevel=0){
imageClick( vx, vy)
sleep 200
}
이런식으로 되죠, gosub 부분만 함수로 바뀐거에요 이건뭐 사용하시는분 취향이니 편한데로 쓰시는게..