2013-02-16 106 views
0

我在Flash(actionscript 2.0)中创建了一个游戏,它需要将鼠标锁定到屏幕中心(如第一人称射击游戏)。在AS3中使用Flash 11.2可以做到这一点,但不能在AS2中做到这一点。使用AutoHotkey的,我能做到这一点,使用此代码:将鼠标锁定到应用程序的中心

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

Esc::ExitApp 

这工作得很好,但我不希望要求AutoHotkey的为我的用户。有没有办法将该脚本转换为独立的应用程序(.exe),或使用其他语言创建该程序? (Flash游戏将不会从网站上发布)

+1

'而(0 = 0)'是有点混乱,因为它简单地计算为'而(真)' – mikew 2013-02-17 04:42:02

+0

@ user2079386,请提供一些反馈提出的解决方案,如果其中一个答案是真正有用的,那么请“接受”该答案。谢谢! – 2013-02-23 08:00:09

回答

1

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

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

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

0

不是采用固定的位置,这可能会表现不同的其他屏幕尺寸,你可以使用WinGetPos并设置X-Y坐标动态。为了防止出现“冻结”鼠标当用户与亚洲货柜 + Tab键切换可以使鼠标锁定,只有当你的游戏是由与IfWinActive检查运行。我选择了一个100毫秒的定时器来调用脚本,而不是使用100 ms等待的循环,但是使用循环或同时也可以。

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") 
} 
+0

'#IfwinActive'只能在热键上使用,而不能在循环等正常代码上使用。但你的其他建议是好的 – mikew 2013-02-17 20:54:34

+0

@mikew,很好。我应该测试这个,而不是只写代码。用一个定时器循环改变它(仍未测试....)。 – 2013-02-18 06:14:31

+0

@ user2079386,看看这个其他的解决方案! – 2013-03-08 09:03:13