y = 0 w = 100 h = 100 ^F:: {??? ??? ; main Function ??? ??? ImageSearch, vx, vy, %x%, %y%, %w%, %h%, *50 img\탐험하기.png ??? if (errorlevel=0){ ??? ??? gosub,클릭 ??? ??? sleep 200 ??? } ??? ??? sleep, 10000 ??? ??? ImageSearch, vx, vy, %x%, %y%, %w%, %h%, *50 img\탐험성공.png ??? if (errorlevel=0){ ??? ??? gosub,클릭 ??? ??? sleep 200 ??? } } return |
위 매크로의 뜻은
텀험하기 이미지를 찾아서 참험하기가 있으면 클릭,
10초 기다리고
탐험성공 이미지가 있으면 해당 좌표 클릭 이 되죠.
말씀하신 ByRef와 함수를 사용하는 방법으로 바꿔볼까요?
|
1. 함수의 사용
- 왜 쓰냐고 하면.. 그냥 짜셔도 됩니다. 일자로.. 쭉쭉... GoSub를 사용하셔도 되구요
하지만 차후에 스크립트가 길어지다 보면 점점 양은 사용하는 수만큼 늘어납니다.
이미지 찾기 스크립트가 4줄이면 100개의 이미지를 찾으려면 그대로 400줄이 늘어나는거구요
함수를 사용하면 4줄을 미리 선언해놓고 불러서 사용하는 것이기 때문에 사용하는 횟수가 늘어나면 날수록 효율적인 코드가 됩니다.
그리고 오류 수정에 있어서도 탁월합니다. 만약 일정 부분이 잘못되었다면 아래의 일부 함수만 수정하면 됩니다. 하지만 그냥 코드를 구현했을 경우에는 각 부분별로 수정해야 되고 사용된 부분을 전부 찾아서 수정해야합니다.
함수를 불러서 사용하게 되면 그 함수 안에서만 값들이 사용되고 버려지므로 더 깔끔한 스크립트 제작이 가능합니다.
여기서... 바로 ByRef를 활용할 수가 있습니다.
2.ByRef?
ByRef는 값이 아닌 값의 주소를 참조하게 만들어 함수내에서도 값을 직접적으로 변경이 가능합니다.
그냥 함수로 변수를 보내면 걍 복사본만 들어갔다가 나오지만 이 ByRef를 사용하면 복사가 아닌 참조값으로 들어가게 됩니다.
하나만 더 예를 들어보면....
AAA = 100
BBB = 200
Loop ,3 {
MsgBox %AAA% and %BBB%
TEST(AAA,BBB)
}
return
TEST(ByRef AAA, BBB) {
AAA := AAA - 10
BBB := BBB - 10
MsgBox %AAA% AND %BBB%
}
return
이렇게 실행을 하면 결과는..
200 and 200??? ;함수 실행 전
190 AND 190?? ;함수 안에서 계산 후
190 and 200??? ;함수 실행 전
180 AND 190?? ;함수 안에서 계산 후
180 and 200??? ;함수 실행 전
170 AND 190?? ;함수 안에서 계산 후
쉽게 쓰려했는데 어떠실지 모르겠네요 ㅎㅎ...
gosub는 방이 그냥 거실로 된 원룸에서 왔다 갔다 하는것이고
함수는 방을 만들고 방에 필요한 것들을 들고 왓다 갔다 하는것인 차이 랄까요...ㅋㅋ
1. 코드를 짤때 가능한 반복 부분은 Function(함수)로...
2. 전역변수는 최소화... 필요하다면 ByRef를 이용하여 구현..
옴마나,,, 설명은 진짜 이해하기 쉽게 잘해주신거 같은데 , 알듯 말듯하네요.. 그냥 설명보면 이해는되는데,,
나중에 보면 백지될거 같네요.. 응용도 못할거 같구요..
이쪽 분야는 거의 처음접하는거라, 이해가 쉽게 되지는 않네요..? 설명은 정말 잘해주셧어요.
닥치는데로 자주 해보는게 더 빨리 습득되겠죠. 여력은 안되네요..
이곳 테일스타에도 , 이런 오토핫키 강좌가 많이 있었으면 좋겠어요..? 수고하셨고 감사합니다.