学习游戏脚本制作:按键精灵键鼠同步器源码分享 
来源:按键学院  【按键精灵】
小编之前也有使用过其它大牛编写的游戏同步的脚本,突然间对于它是如何实现同步感到十分好奇,我们一起来研究看看,同步到底是怎么实现的吧~
NO.1-同步的前提
前提
游戏免费源码分享网站
1 同步的两个窗口需要是同一个应用窗口,并且窗口大小要相同
2 同步窗口可以接收到按键的键鼠发送信息
3 同步的窗口支持后台键鼠操作
NO.2-本节例子及其能实现的功能
例子
1 画图工具,实现同步画图
2 记事本,实现同步删除内容
功能      键鼠同步
             支持组合键
NO.3-思路大剖析
思路步骤
1 获取主窗口和被同步窗口句柄
    WaitKey 命令等待键盘按下
 按下F6则获取当前鼠标指向的窗口句柄,作为主窗口句柄。
 按下F7 则获取当前鼠标指向的窗口句柄,作为同步窗口句柄。
   用Do循环来等待按键,当主窗口句柄和同步窗口句柄都获取到时,退出Do循环
 代码
Do
    Key = WaitKey()
    If Key = 117 Then
        主窗口 = Plugin.Window.MousePoint()
    End If
    If Key = 118 Then   
        同步窗口 = Plugin.Window.MousePoint()
    End If
    Delay 500
    If 主窗口 <> 0 and 同步窗口 <> 0 Then 
        Exit Do
    End If
Loop
2 设置两个窗口的窗口大小一致
    窗口大小一致,同步的时候鼠标才能移动到正确的位置。
 代码
   Call Plugin.Window.Size(主窗口,800,600)
   Call Plugin.Window.Size(同步窗口,800,600)
3 获取主窗口的左上角坐标
   GetWindowRect 命令获取主窗口的左上角坐标
 代码
        sRect = Plugin.Window.GetWindowRect(主窗口)   
        dim MyArray   
        MyArray = Split(sRect, "|")   
        L = Clng(MyArray(0)): T = Clng(MyArray(1))
4 获取当前鼠标在主窗口的位置
   GetCursorPos命令获取当前鼠标位置
 代码 
                       GetCursorPos mx, my
5 计算主窗口内当前鼠标位置和窗口左上角距离
●   公式:当前鼠标位置减去窗口左上角坐标值( mx-L, my-T)
6 开始同步
 被同步窗口,使用按键后台键鼠命令,将鼠标移动到和主窗口相同的位置
 按键后台命令鼠标移动是以窗口客户区左上角坐标为基点
 代码
                       Call Plugin.Bkgnd.MoveTo(同步窗口, mx-L, my-T)
●在主窗口内按下任意键时,同步窗口也执行同样的操作
 代码
                       Key = GetLastKey()
                       Call Plugin.Bkgnd.KeyPress(同步窗口, Key)
NO.4-代码
代码
Do
    Key = WaitKey()
    If Key = 117 Then
        主窗口 = Plugin.Window.MousePoint()
        //Call Plugin.Window.Size(主窗口,800,600)
    End If
    If Key = 118 Then   
        同步窗口 = Plugin.Window.MousePoint()
      // Call Plugin.Window.Size(同步窗口,800,600)
    End If
    Delay 500
    If 主窗口 <> 0 and 同步窗口 <> 0 Then 
        Exit Do
    End If
Loop
Do
    Mouse = GetLastClick()
    If Mouse = 32769 Then  //鼠标左键按下时ASCII码为  32769 
        sRect = Plugin.Window.GetWindowRect(主窗口)     
        dim MyArray   
        MyArray = Split(sRect, "|")   
        L = Clng(MyArray(0)): T = Clng(MyArray(1)) 
        GetCursorPos mx, my
        Delay 10
        Call Plugin.Bkgnd.LeftDown(同步窗口, mx-L, my-T)   
        Delay 10
        Do
            Mouse = GetLastClick()
            If Mouse = 0 Then  //鼠标无点击操作
                GetCursorPos mx, my
                Delay 10
                Call Plugin.Bkgnd.MoveTo(同步窗口, mx-L, my-T)
                Delay 10
            End If
            If Mouse = 32770 Then //鼠标左键弹起时ASCII码为  32770 
                GetCursorPos mx, my
                Delay 10
                Call Plugin.Bkgnd.LeftUp(同步窗口, mx-L, my-T)
                Exit Do
            End If       
        Loop
    End If
    Key = GetLastKey()
    Call Plugin.Bkgnd.KeyPress(同步窗口, Key)
Loop

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。