매크로

조회 수 1005 추천 0 댓글 3


R7GeQvg.png

위 스샷과 같은 리듬게임 매크로를 만드려고 합니다.


1. 구동환경


MEmu라는 에뮬(?)을 통해 PC에서 안드로이드 게임을 구동


i7의 부족함이 없는 컴퓨터 성능


2. 게임에 대한 소개


리듬게임으로 캐릭터 면상 위에 빨간버튼이 오면 클릭, 주황 버튼이 오면 꾸욱 누르기,


파란 버트닝 오면 해당 방향으로 드래그 해야 한다.


3. 설계


이미지서치와 비활성 클릭을 통한 구현


4. 문제점


- 멀티터치가 안됨. 동시에 꾸욱 눌러야 하는 상황에 대처 불가능


- 프로그램 성능 부족. 초기 테스트 단계에서 몇가지 버튼만 테스트할 시에는 작동을 잘 하나,

   버튼수가 많아지고 이미지서치하는게 많아지니 제대로 구동이 안됨.


5. 소스

global bt1:=252|632<<16
global bt1l:=162|632<<16
global bt1r:=342|632<<16 ;버튼 위치들에 대한 값. bt1l, bt1r은 드래그해야할 도착 위치.
global wintitle:="MEmu 2.9.6 - MEmu"
global n1:=0
F8::exitapp


F2::
{
loop ;무한반복
{
imagesearch,vx,vy,237,630,267,660,*10 %A_ScriptDir%/normal.bmp  ;일반 클릭하는 명령
if errorlevel = 0
{
postmessage, 0x201, 1, %bt1%, , %wintitle%
postmessage, 0x202, 0, %bt1%, , %wintitle%
}

imagesearch,vx,vy,237,630,267,660,*10 %A_ScriptDir%/push.bmp  ;꾸욱 눌러줘야 하는것에 대한 명령
if errorlevel = 0
{
if n1 = 0
{
n1:=n1+1
postmessage, 0x201, 1, %bt1%, , %wintitle%
}
else
{
n1:=n1-1
postmessage, 0x202, 0, %bt1%, , %wintitle%
}
}

imagesearch,vx,vy,187,622,207,642,*10 %A_ScriptDir%/side.bmp ;왼쪽으로 드래그
if errorlevel = 0
{
if n1 = 1
{
n1:=13-1
postmessage, 0x202, 0, %bt1%, , %wintitle%
}
else
{
postmessage, 0x201, 1, %bt1%, , %wintitle%
postmessage, 0x202, 0, %bt1l%, , %wintitle%
}
}

imagesearch,vx,vy,297,622,317,642,*10 %A_ScriptDir%/side.bmp  ;오른쪽으로 드래그
if errorlevel = 0
{
if n1 = 1
{
n1:=n1-1
postmessage, 0x202, 0, %bt1%, , %wintitle%
}
else
{
postmessage, 0x201, 1, %bt1%, , %wintitle%
postmessage, 0x202, 0, %bt1r%, , %wintitle%
}
}


나머지 4개의 버튼에 대하여 위 소스 반복.


6. 상세

버튼의 색상이 단일 색상이 아니라서


딱 1개 픽셀만 찍어내서 이미지 서치로 약간의 오차범위를 스캔하게 했습니다.


컴퓨팅 성능낭비를 줄이기 위해 버튼별로 20X20 ~ 30X30 픽셀 범위로 스캔하도록 했어요.



드래그 해야하는 파란색 버튼의 경우, 빨강 주황버튼과 달리 방향구분이 필요해서


해당 방향으로 삐죽 튀어나온 부분의 좁은 구역에 파란색 픽셀을 감지하도록 했구요.



우선 빨강 버튼과 주황버튼만 조합한 테스트 단계에서는 정상작동 잘 되는걸 확인했구요


파란색 버튼까지 스캔하는 코드를 넣으면 작동을 못합니다.


파란색 버튼 설계가 잘못되서 드래그를 못하는건 그렇다고 쳐도


정상 작동되던 빨강, 주황버튼까지 작동을 못하더라구요.


아무래도 이미지스캔할게 많아지다보니 제때제때 동작을 못하는거 같습니다.



원하는건


- 멀티터치를 어떻게 구현해야하나


- 쾌적한 동작을 위해 어떻게 해야하나


입니다.


코드의 개선점이라던가, 좋은 함수의 소개든지 어떤것이든 좋습니다.




  • 슉슉이 2017.05.24 10:40

    1. 동시클릭은 안됩니다. 아주 빨리 순차클릭으로 동시처럼? 작동하게는 가능합니다.


    2. imagesearch <- 이건 에어로피크가 켜져있으면 느립니다. 윈 7의 경우 에어로 피크를 완정히 끌 수 있어서 빨리 작동하지만 원10일 경우 기본적인 서치시간이 있어서 1을 구현하기가 힘듭니다.


    정말 빠른 캡쳐 방법이 있지만, 지금은 지원하는 지는 모르겠지나 미뮤는 다이랙트액스를 지원하지 않아 프린트윈도우 함수를 못씁니다(녹스 스피드모드, 블루스택 가능).

  • 단백질 2017.05.24 12:00

    굳이..리듬게임까지 매크로 돌려야됨꽈 ㅠㅠ

  • 암드래 2017.05.24 19:26

    - 멀티터치를 어떻게 구현해야하나

    => 멀티스레드를 통한 멀티터치 구현 (오토핫키는 단일 스레드 스크립트 언어이므로 불가능)

    => C++이나 C# 이용


    - 쾌적한 동작을 위해 어떻게 해야하나

    => 오토핫키 원본 소스코드를 확인해보면 이미지 서치 함수는 반복문 작업이 많음

    => 따라서, 따로 이미지 서치 함수만 떼어내서 해당 반복문에 대해 분산 처리를 하도록 코딩하여 반복문 속도개선 (병렬 프로그래밍)

    => http://sosal.kr/466 참고


List of Articles
분류 제목 글쓴이 최근변경 추천
질문 꼭 좀 부탁드립니다. 간단한 거지만 저한테는 절실하거... 8 생존자8 2017.06.08 0/0
질문 (초보) 이미지서치 연속사용 1 작은이득 2017.06.07 0/0
질문 오토핫키 초보 학습자 질문입니다. 생존자8 2017.06.06 0/0
질문 Gdip_ImageSearch 오류 문의합니다. 2 fnwj 2017.06.07 0/0
질문 하드인증 푸는법도 있나요? 2 유비스 2017.09.11 0/0
질문 오토핫키 2일차 이미지서치관련질문 부탁드려여 3 작은이득 2017.06.06 0/0
질문 템 파밍 후 문서로 저장도 가능한가요? 2 매우빤딱 2017.08.13 0/0
질문 제발 부탁드립니다.. 2주간 삽질헀는데.. 고수님도와주... CMD76 2017.06.02 0/0
질문 오토핫키 이미지서치 여러번 하고싶은데 도와주세요 2 오오토뉴비 2017.06.04 0/0
정보 perl을 이용한 adb capture 방법 Allyce 2017.06.02 1/0
질문 녹스는 되는데 블루스택 픽셀서치가 인식을못해요 .. 1 태풍지애 2017.05.31 0/0
질문 안녕하세요 오토핫키 질문이 있어요 2 kjk 2017.06.06 0/0
자유 메M은 오핫으로만들어야한다던데 1 용용동동 2017.05.26 0/0
질문 같은 줄의 이미지 두개 인식하려면 어찌하나요 1 zilla 2017.06.03 0/0
질문 오토핫키를 이용하여 한글 에서 수식 수정창 띄우기를 ... 1 오토핫삼 2017.06.07 0/0
질문 이미지서치 성능개선할 수 없나요 3 츠네로바 2017.05.24 0/0
질문 블루스택에서 비활성 클릭하기 2 cis105 2017.06.30 0/0
질문 이미지 서치후 그 이미지를 클릭하려면 어떻게 하나요?... 100z 2017.05.22 0/0
질문 간단한 질문입니다 구이버튼관련... 4 가족오락관 2017.05.21 0/0
자유 오토핫키 제작으뢰를좀 하고싶은대 갓지노 2017.05.15 0/0
Board Pagination Prev 1 ... 878889909192939495 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글