我在Flash(动作脚本2.0)中创建了一个游戏,它需要将鼠标锁定在屏幕中心(就像第一人称射击游戏一样)。可以在AS3中使用Flash 11.2执行此操作,但不能在AS2中执行此操作。使用AutoHotKey,我可以使用以下代码执行此操作:
while (0=0){
MouseMove, 410, 302, 90
sleep 100
}
Esc::ExitApp
这很好用,但我不想为我的用户要求AutoHotKey。有没有办法将该脚本转换为独立的应用程序(.exe),或用另一种语言创建该程序? (Flash游戏不会从网上发布)
答案 0 :(得分:1)
有没有办法将该脚本转换为独立的应用程序(.exe)?
如果您已正常安装AHK,您应该能够右键单击.ahk文件并选择“编译脚本”。
如果没有该选项,您可以在开始菜单中查找“ahk2exe”编译器,该编译器将生成脚本的.exe输出。
答案 1 :(得分:0)
您可以使用WinGetPos
并动态设置X-Y坐标,而不是使用可能在其他屏幕尺寸上表现不同的固定位置。当用户使用 Atl + Tab 切换时,为了防止“冻结”鼠标,只有在游戏运行时才能通过IfWinActive
进行检查来锁定鼠标。我没有使用100毫秒等待的循环,而是选择了一个100毫秒的计时器来调用脚本,但是使用循环或者while也能正常工作。
SetTitleMatchMode, 2
SetTimer, CheckWin, 100
CheckWin:
{
IfWinActive, YourAppNameHere ; ONLY runs when Your App is Active
{
WinGetPos, XStart, YStart, Width, Height, YourAppNameHere ; Use AHK Window Spy
XPos:=XStart+(Width/2)
YPos:=YStart+(Height/2)
MouseMove, %XPos%, %YPos%, 90
Return
}
}
^F1:: ; Ctrl+F1 to stop the timer based loop
SetTimer, CheckWin, Off
Return
这是另一种解决方案:
#SingleInstance Force
#installKeybdHook
#Persistent
Xbutton2:: ; Toggle fix mouse in Center
Confine := !Confine
ClipCursor( Confine, A_ScreenWidth/2, A_ScreenHeight/2, A_ScreenWidth/2, A_ScreenHeight/2 )
Return
ClipCursor( Confine=True, x1=0 , y1=0, x2=1, y2=1 )
{
VarSetCapacity(R,16,0), NumPut(x1,&R+0),NumPut(y1,&R+4),NumPut(x2,&R+8),NumPut(y2,&R+12)
Return Confine ? DllCall( "ClipCursor", UInt,&R ) : DllCall( "ClipCursor" )
}