2D 게임용 매크로를 작성하고 있습니다. 문자의 좌표는 (x, y)로 지정됩니다. 게임에 장애물이있어서 캐릭터가 움직이는 방식으로 프로그래밍해야합니다.Autohotkey : 2D 게임에서 프로그래밍하는 방법
그래서 게임의 x 및 y 좌표 메모리를 읽는 프로그램을 작성했습니다. 그런 다음 캐릭터를 원하는 위치로 이동시키는 함수를 작성했습니다. 논리는 다음과 같습니다. x 좌표가 원하는 위치보다 작 으면 계속 오른쪽으로 이동하고 반대의 경우도 마찬가지입니다. 그런 다음 y 좌표가 원하는 위치보다 작 으면 계속 위로 이동하고 그 반대의 경우도 마찬가지입니다.
그러나 장애물 때문에 수동으로 이동할 좌표를 지정해야합니다. 예를 들어 내가 (1,1)에 있었고 캐릭터에게 (5,5)로 이동하라고 말하면 (3,1)에 장애물이있을 수 있으며 캐릭터가 붙어있을 것입니다. 그래서 먼저 (1,3)로 이동 한 다음 (5,3)으로 이동 한 다음 (5,5)로 이동하도록 알려줍니다.
저는 캐릭터가 움직일 때 순차적으로 어떻게 말하는 지 혼란 스럽습니다. (1,3)로 이동 한 후 (5,3)으로 이동 한 다음 (5,5) 이동하십시오.
이 내가 가진 무엇 :
f1::
WinGetTitle, ai, A
curX := ReadMemory(0x10F6A7D0, ai)
curY := ReadMemory(0x10F6A7D4, ai)
MoveTo(21,13)
if(curX == 21 && curY == 13){
MoveTo(21,28)
}
return
q::
Pause
return
ReadMemory(MADDRESS,PROGRAM)
{
winget, pid, PID, %PROGRAM%
VarSetCapacity(MVALUE,4,0)
ProcessHandle := DllCall("OpenProcess", "Int", 24, "Char", 0, "UInt", pid, "UInt")
DllCall("ReadProcessMemory","UInt",ProcessHandle,"UInt",MADDRESS,"Str",MVALUE,"UInt",4,"UInt *",0)
Loop 4
result += *(&MVALUE + A_Index-1) << 8*(A_Index-1)
return, result
}
MoveTo(targetX,targetY)
{
xadd = 0x10F6A7D0
yadd = 0x10F6A7D4
WinGetTitle, ai, A
Loop{
curX:= ReadMemory(xadd,ai)
curY:= ReadMemory(yadd,ai)
if(curX < targetX){
ControlSend,, {Right}, %ai%
}
else if(curX > targetX){
ControlSend,, {Left}, %ai%
}
else if(curY < targetY){
ControlSend,, {Down}, %ai%
}
else if(curY > targetY){
ControlSend,, {Up}, %ai%
}
Sleep, 30
스크립트에서 장애물을 확인하고 있습니까? – MCL
장애물을 모두 피할 수 있도록 코드를 작성합니다. 지도는 무작위가 아니므로 캐릭터를 특정 장소로 이동시켜 피할 수 있도록 할 수 있습니다. –
그 다음 코드의 어느 부분입니까? – MCL