罗技游戏软件 LUA脚本编程 从入门到放弃 篇四:鼠标定位与移动

2017-05-20 20:00:00 36点赞 112收藏 42评论

鼠标定位与移动

距上一篇已经快一个月啦,原因有三~

一个是忙,宝宝更大了,已经习得连续滚翻天赋,没办法放上或车上忽悠一会儿抽点时间出来了。

一个是懒,这个没药医。

还有一个,就是LGS的鼠标坐标相关函数的参数系统,乱得一逼。特别是在双屏的情况下,基本每个函数的参数用法都不一样鼠标定位与移动

我花了点时间整理了一下几个函数的参数规律,适用于多显示器的朋友参考。

如果你跟我一样使用多显示器,使用鼠标移动、定位的相关函数之前,请务必看完,否则会一头雾水。

如果你只有单显示器……呃,差不多可以直接看下一期了。鼠标定位与移动

GetMousePosition

鼠标定位与移动

首先我们来看仅有的、获取鼠标坐标的方式,GetMousePosition。

之所以要用这个函数,因为LGS里并非以屏幕像素坐标来作为参数,而是以0至65535为区间两头。

也就是说,假设你的鼠标在屏幕右下角,以传统的像素坐标系,它应该是x=1920,y=1080。但是在LSG的坐标系里,它就是x=65535,y=65535。

并且,LGS的直接移动函数都是用的此等计算方法,所以如果你的取点和定位都用LGS来完成的话,或许还是离不开这个函数的。

或者,咱们可以用其他软件取得像素坐标,然后通过数学换算的方式算得LGS的这个坐标系,也是可以的。

鼠标定位与移动

经过实战,GetMousePosition这个函数以主显示器左上角为原点(0,0),所以如果你的副显示器在主显左边,则X轴就会变成负数。如果在右边,则X轴会大于65535,以此类推。鼠标定位与移动

MoveMouseTo

鼠标定位与移动

这个函数非常坑爹,它只能在主显示器范围内移动。

我的主显示器是靠右的宽屏,无法移动到靠左的带鱼。

因为,传负数进去函数会直接报错,而官方文档也写了,如果接入了多个显示器请用其他函数代替。

所以,如果你只有单显示器,用GetMousePosition和MoveMouseTo函数即可。

但是如果你接了多显,那就**了……请往下看。

鼠标定位与移动

MoveMouseToVirtual

鼠标定位与移动

根据官方文档,这是唯一一个能在多显示器状态下,移动鼠标到任意位置的函数。

但是经过实测,这个函数的参数规则,是以全桌面的最左上角为(0,0),说白了,和GetMousePosition函数是不一样的。

鼠标定位与移动

也就是说,你用GetMousePosition函数辛辛苦苦抓取的坐标,在这个函数里是不能用的,必须要经过计算变换…………鼠标定位与移动

能干出这种事情来,LGS的工程师也算是人才了。估计这俩函数不是同一个人写的,又没有一个统筹的产品经理,于是这几个奇葩的函数就这么诞生了。

MoveMouseRelative

鼠标定位与移动

那么,LGS非常“慈悲”的提供了另一个函数,以当前鼠标坐标为原点,进行“相对移动”的函数。

但是奇葩的是,这个函数的坐标参数,使用的是像素,也就是屏幕像素,而非前面几个函数的65535系统。

那么毫无疑问了,这三个函数肯定是三个不同的程序员写的,而且他们没有一个产品经理……

而更更更更奇葩的是,这个函数的参数最多只能接受-127到128,也即一个字节的0xFF。

如果你传入了大于128的数字,则会溢出,129相当于-127,256相当于0,虽然不会报错,但是绝对得不到想要的结果。

因为LUA都是要宿主导出函数的,如果宿主参数定义的时候,就只有一个字节,那也就会变成这样了。

--------------------------------------------------------------------------------------------------

说了那么多,如果非要总结一下的话:

假如你是独显,或者多显但脚本只用在主显示器上,则问题不大,使用GetMousePosition函数获取坐标之后,使用MoveMouseTo移动即可。

如果你的脚本有用在多显器的非主显示器上,则必须先使用GetMousePosition获得一套坐标,经过算术变换,算得另一套坐标,再使用到MoveMouseToVirtual函数里。鼠标定位与移动

本期就先用MoveMouseRelative来做一下守望屁股的一键转身,下期再整理一份多屏情况下通用的变换函数和应用脚本。

由于MoveMouseRelative函数一次最多只能移动128个像素,为了方便调试,结合实测之后,大概是每次10个像素,182次移动可以转大概180度……这个参数根据每个人的分辨率、游戏、鼠标状况等都有可能不一样,只能自行实测了。

代码和罗技的参考文档都放到度盘里了,车牌号1bp3oOP5。

下一期:坐标变换与一键换装鼠标定位与移动

展开 收起

RAPOO 雷柏 VT9Air 2.4G双模无线鼠标 26000DPI 半透明蓝色

RAPOO 雷柏 VT9Air 2.4G双模无线鼠标 26000DPI 半透明蓝色

249元起

RAPOO 雷柏 VT9Air 2.4G双模无线鼠标 26000DPI 半透明黑色

RAPOO 雷柏 VT9Air 2.4G双模无线鼠标 26000DPI 半透明黑色

249元起

RAPOO 雷柏 VT9Air轻量化59g原相3398引擎支持4K+8K回报率亲肤半透外壳紫色 VT9Air星霜

RAPOO 雷柏 VT9Air轻量化59g原相3398引擎支持4K+8K回报率亲肤半透外壳紫色 VT9Air星霜

249元起

ROG 玩家国度 影刃3无线 AimPoint 36k传感器 无线鼠标 电竞游戏鼠标 轻量化 对称手型 RGB灯效 黑色

ROG 玩家国度 影刃3无线 AimPoint 36k传感器 无线鼠标 电竞游戏鼠标 轻量化 对称手型 RGB灯效 黑色

349元起

Logitech 罗技 M720 2.4G蓝牙 优联 双模无线鼠标 1000DPI 黑色

Logitech 罗技 M720 2.4G蓝牙 优联 双模无线鼠标 1000DPI 黑色

143元起

RAPOO 雷柏 MT760mini中小手无线/蓝牙/有线多模办公鼠标 人体工学跨屏传输150小时续航11键可

RAPOO 雷柏 MT760mini中小手无线/蓝牙/有线多模办公鼠标 人体工学跨屏传输150小时续航11键可

159元起

inphic 英菲克 X5 透明无线静音鼠标 1600DPI

inphic 英菲克 X5 透明无线静音鼠标 1600DPI

26元起

RAPOO 雷柏 VT9PRO mini 2.4G双模无线鼠标 26000DPI 白色

RAPOO 雷柏 VT9PRO mini 2.4G双模无线鼠标 26000DPI 白色

249元

Logitech 罗技 G502 2.4G LIGHTSPEED 无线鼠标 25600DPI RGB 黑色

Logitech 罗技 G502 2.4G LIGHTSPEED 无线鼠标 25600DPI RGB 黑色

199元起

Logitech 罗技 G304 2.4G LIGHTSPEED 无线鼠标 12000DPI

Logitech 罗技 G304 2.4G LIGHTSPEED 无线鼠标 12000DPI

119元起

RAPOO 雷柏 VT9Air中小手无线/有线双模游戏鼠标 轻量化59g

RAPOO 雷柏 VT9Air中小手无线/有线双模游戏鼠标 轻量化59g

249元起

MACHENIKE 机械师 毒液M721 双模鼠标 10000DPI

MACHENIKE 机械师 毒液M721 双模鼠标 10000DPI

139元起

RAZER 雷蛇 毒蝰V3极速版 无线鼠标

RAZER 雷蛇 毒蝰V3极速版 无线鼠标

455.05元起

inphic 英菲克 PM6 2.4G无线鼠标 1600DPI

inphic 英菲克 PM6 2.4G无线鼠标 1600DPI

19.9元起

RAZER 雷蛇 炼狱蝰蛇V2 X 极速版 2.4G蓝牙 HYPERSPEED 双模无线鼠标 14000DPI 黑色

RAZER 雷蛇 炼狱蝰蛇V2 X 极速版 2.4G蓝牙 HYPERSPEED 双模无线鼠标 14000DPI 黑色

179元起

logitech 罗技 GPW 二代 2.4G Lightspeed 无线鼠标 25600DPI

logitech 罗技 GPW 二代 2.4G Lightspeed 无线鼠标 25600DPI

369元起
42评论

  • 精彩
  • 最新
  • 加个蜂鸣器呢,能搞不

    校验提示文案

    提交
    你是指BEEP?不行的。LUA的特性就是,脚本本身只实现逻辑和数据,其余所有的功能都由宿主提供。如果宿主没有提供接口,那就做不了。LGS没有BEEP的接口。

    校验提示文案

    提交
    收起所有回复
  • 楼主这个是不是用鼠标侧键触发

    校验提示文案

    提交
    所有按键皆可响应,看你设置

    校验提示文案

    提交
    收起所有回复
  • 楼主你好。我想问下如果拿这个做压枪的脚本是不是用MoveMouseRelative这个方法然后固定下移多少个单位。。看了下好像就这个有用。。

    校验提示文案

    提交
    是的~只能做简单的前三连压枪~

    校验提示文案

    提交
    主要最近沉迷吃鸡,听说G502可以做压枪宏-。- 是不是就鼠标左键按下 弹起 下移坐标 循环
    实际上手动压不是更好方便吗。。

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 请教如何实现按下不松时脚本循环执行

    校验提示文案

    提交
    1.做一个宏,设置为循环,按下执行,松开停止。
    2.死循环,通过变量控制,按下变量为真,执行,松开变量为假,跳出循环。

    校验提示文案

    提交
    收起所有回复
  • 请问为什么IsMouseButtonPressed(1)可以用 IsMouseButtonPressed(7)就亮红了?就连IsMouseButtonPressed(2)也是 [损失几个亿]

    校验提示文案

    提交
    这函数只支持系统鼠标键,1-5,这个说起来比较复杂。最近比较忙一直搁着没写,有空了我会专门写一篇关于这个问题的~

    校验提示文案

    提交
    谢谢大神的指导

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 大哥 怎么获取LGS坐标????我用网上的鼠标取点器获得的坐标都不对啊

    校验提示文案

    提交
    用自带的GetMousePosition,一开头就写了啊

    校验提示文案

    提交
    x, y = GetMousePosition();
    OutputLogMessage("Mouse is at %d, %d\n", x, y);

    代码能运行,但是怎么输出我鼠标现在所处位置的XY

    校验提示文案

    提交
    收起所有回复
  • 我的天啊,我想玩魔兽世界怀旧服,想找一个能编程的鼠标,请问有推荐么

    校验提示文案

    提交
    LUA编程只有罗技一家,宏的话倒是每家都有

    校验提示文案

    提交
    收起所有回复
  • 波导,怎么找你的百度云 [损失几个亿] 不懂车牌号什么意思

    校验提示文案

    提交
  • 这是什么?我在哪里?怎么出去?⊙ω⊙

    校验提示文案

    提交
  • 居然都看懂了,回头找前面的三篇看一下。不打fps,所以暂时没有这样的需求,但是感觉有点意思。不过那三个方法,确实能切身体会到作者抓狂的表情。应该又是阿三程序员干的。 [大囧]

    校验提示文案

    提交
  • 屁股刚出来的时候,我拿LUA编了个大锤360度回旋锤的脚本,结果差转吐了 [吐]

    校验提示文案

    提交
  • function OnEvent(event,arg)
    if IsMouseButtonPressed(4) then
    for i=1,2 do
    MoveMouseRelative(0,1)
    end
    end
    end

    校验提示文案

    提交
    用这个实现压枪?

    校验提示文案

    提交
    收起所有回复
  • 楼主你好 请问g502的1键是没办法编辑吗?我把你文件里的键值改成2.3.4.5都可以就是1不行 怎样才能实现1键的功能?

    校验提示文案

    提交
  • 最近打算搞一个用鼠标的控制键盘分层的程序,特地来学习一下

    校验提示文案

    提交
  • LUA还可以做工业机器人的后置 [笑]

    校验提示文案

    提交
  • 这是啥?能识别图像吗?跟按键精灵啥区别

    校验提示文案

    提交
  • 这是什么?我在哪里?怎么出去?⊙ω⊙

    校验提示文案

    提交
  • 阿婆主你好,

    校验提示文案

    提交
  • 看不懂但还是觉得很刘逼

    校验提示文案

    提交
  • 我好像用了一个while就可以了 发不出来

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
112
扫一下,分享更方便,购买更轻松