0

我在 Flash (actionscript 2.0) 中创建了一个游戏,它需要将鼠标锁定在屏幕中央(就像第一人称射击游戏一样)。在带有 Flash 11.2 的 AS3 中可以做到这一点,但在 AS2 中则不行。使用 AutoHotKey,我可以使用以下代码执行此操作:

while (0=0){
    MouseMove, 410, 302, 90 
    sleep 100
}

Esc::ExitApp

这很好用,但我不想为我的用户要求 AutoHotKey。有没有办法将该脚本转换为独立的应用程序(.exe),或者用另一种语言创建这个程序?(Flash 游戏不会从网络上启动)

4

2 回答 2

1

有没有办法将该脚本转换为独立应用程序(.exe)?

如果你已经正常安装了 AHK,你应该可以右键单击 .ahk 文件并选择“编译脚本”。

如果该选项不存在,您也可以在开始菜单中查找“ahk2exe”编译器,该编译器将生成脚本的 .exe 输出。

于 2013-02-17T04:44:40.580 回答
0

WinGetPos您可以动态使用和设置 XY 坐标,而不是使用可能在其他屏幕尺寸上表现不同的固定位置。为防止用户使用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" ) 
}
于 2013-02-17T08:22:19.527 回答