Untuk lebih tepat, gunakan sudut kiri atas kawasan kandungan permainan (setelah menolak bar tajuk dan sempadan) sebagai asas, bukannya sudut kiri atas keseluruhan tetingkap.
; Koordinat sudut kiri atas tetingkap permainan (perlu diperolehi terlebih dahulu)
winX = 100
winY = 80
; Dapatkan koordinat tetikus skrin
GetCursorPos mouseX, mouseY
; Tukar kepada koordinat dalam tetingkap permainan
gameX := mouseX - winX
gameY := mouseY - winYNota Penting:
Semasa fasa pembangunan, memasukkan koordinat secara manual adalah menyusahkan. Cara yang lebih cekap ialah: tekan satu kekunci panas, dan koordinat posisi tetikus semasa akan terus diisi ke dalam medan GUI skrip.
; Daftar kekunci panas F1
Hotkey, F1, GetMousePos
return
GetMousePos:
MouseGetPos, mx, my
GuiControl,, FindX, %mx%
GuiControl,, FindY, %my%
ToolTip, Koordinat ditangkap: X%mx% Y%my%
SetTimer, RemoveTip, -2000
returnDengan ini, hanya perlu gerakkan tetikus ke sasaran, tekan F1, dan koordinat akan diisi secara automatik ke dalam medan "Cari X / Cari Y". Anda boleh mengikat kekunci panas yang berbeza ke medan koordinat yang berlainan mengikut keperluan.
Skrip asal direka dengan empat butang bebas, setiap satu dengan masa tunda sendiri. Walau bagaimanapun, dalam permainan sebenar, sering kali perlu menghantar dua butang berturut-turut (contohnya, tekan butang skill dahulu, kemudian butang bantuan), dan kemudian menunggu.
Arah pengubahsuaian:
SendKeyGroup(useGroup, keyA, keyB, waitMs, minute) {
global TimerCount, TargetHwnd
if (useGroup != 1)
return
if (minute > 0 and Mod(TimerCount, minute * 60) = 0) {
; Hantar kumpulan butang setiap N minit
ControlSend, , {%keyA%}, ahk_id %TargetHwnd%
Sleep, 100
ControlSend, , {%keyB%}, ahk_id %TargetHwnd%
}
if (minute = 0) {
; Hantar setiap kitaran
ControlSend, , {%keyA%}, ahk_id %TargetHwnd%
Sleep, 100
ControlSend, , {%keyB%}, ahk_id %TargetHwnd%
}
}Ini adalah dilema paling biasa dalam skrip permainan AHK:
| Kaedah | Kelebihan | Kekurangan |
|---|---|---|
| Boleh dihentikan bila-bila masa, tidak menyekat skrip, struktur jelas | Selang minimum kira-kira 1 saat, tidak sesuai untuk operasi frekuensi tinggi |
| Boleh mengawal selang antara setiap kitaran dengan tepat | Memerlukan mekanisme tambahan untuk memberhentikan skrip, mudah terhenti |
Jika permainan anda memerlukan operasi pada frekuensi satu saat atau lebih perlahan (contohnya, menggunakan skill berulang, buff berkala), SetTimer adalah pilihan yang lebih bersih. Jika memerlukan kawalan tepat pada peringkat milisaat, gunakan gelung Sleep dengan syarat break.
PostMessage atau mencari mesej tetingkap lain.{F1}, {Enter}.MouseGetPos, , , TargetHwndControlClick mungkin akan tersasar. Disarankan untuk menggunakan permainan dalam mod tetingkap dan tetapkan skala paparan kepada 100%.Mengubah suai daripada skrip hadapan kepada sistem butang berpasangan latar belakang memerlukan perubahan teras pada: pemilihan arahan latar belakang (ControlSend / ControlClick), pengiraan koordinat dalam tetingkap, dan cara pemacu kitaran utama. Contoh pengubahsuaian yang disertakan dalam artikel ini boleh terus digunakan pada Shui Hu Hero Online atau skrip automasi permainan lain yang mempunyai keperluan serupa. Jika permainan anda mempunyai kombinasi butang khas atau keperluan klik koordinat, disarankan untuk memulakan ujian dengan versi latar belakang yang paling minimum dan menambah fungsi secara berperingkat.