罗技游戏方向盘软件开发工具包.docx
- 文档编号:8437862
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:22
- 大小:227.71KB
罗技游戏方向盘软件开发工具包.docx
《罗技游戏方向盘软件开发工具包.docx》由会员分享,可在线阅读,更多相关《罗技游戏方向盘软件开发工具包.docx(22页珍藏版)》请在冰豆网上搜索。
罗技游戏方向盘软件开发工具包
罗技
罗技游戏方向盘软件开发工具包概述和参考
罗技游戏方向盘软件开发工具包包含所有的附加文件,且受到知识产权法的保护,所有罗技游戏方向盘开发包都承受了在这篇文当结尾处“罗技游戏中的许可协议方向盘SDK许可协议”文件。
如果您不同意条款和许可协议中的条件,你必须立即返回任意的文档,附带的软件和所有其他材料都是由罗技为您提供,所有未明确的授权,罗技拥有解释权。
概述
罗技游戏方向盘SDK能应用在控制游戏诸如各种类型的游戏控制器(USB/游戏端口轮/游戏杆/游戏垫,力回馈启用与否)。
通过使用方向盘SDK你可以确保所有的轮子和操纵杆的功能将发挥完美。
没有比在一场游戏中方向盘或摇杆的力反馈不同而导致用户受挫和产品遭到退货更严重的情况了,请注意只有在安装了罗技游戏软件后,SDK才将正常工作,如果想获得更多的信息请访问logitech./en-us/gaming。
SDK包
下面的文件包括:
LogitechSteeringWheelLib.h:
C/C++包含头文件的函数原型
LogitechGSDK.cs:
C#引用文件用来访问被包装的SDK
LogitechSteeringWheelLib.lib:
LIB文件访问DLL导出函数(32位和64位)
LogitechSteeringWheelEnginesWrapper.dll:
SDK函数封装(32位和64位)
要求
罗技游戏方向盘SDK可以在以下平台上使用:
WindowsXPSP2(32位和64位)
WindowsVista(32-bitand64-bit)
Windows7(32-bitand64-bit)
Windows8(32-bitand64-bit)
罗技游戏方向盘SDK是一个基于C语言的接口,是为使用C/C++的程序员设计的。
熟悉Windows编程也是必须的。
使用SDK接口
使用LogitechSteeringWheel.h和LogitechSteeringWheel.lib访问LogitechSteeringWheel.dll
应用程序可以包括LogitechSteeringWheel.h并到LogitechSteeringWheel.lib(参见“样本
使用该SDK”进一步说明或样本文件夹中的示例程序)的。
安装文件夹中的DLL需要是相同的主可执行文件,或者需要在该系统环境中的路径的一部分。
多客户端同时使用SDK
该SDK只允许一个用户在任何给定时间来控制的装置。
如果两个应用程序尝试初始化SDK的设备,只有第一个将成功。
第二个应用程序的初始化将失败。
该做什么和不该做什么
这些都是一些指导原则,可以帮助在你的游戏中获得'更好'的支持:
函数LogiSteeringInitialize()会试图获得你的应用程序/游戏主窗口句柄。
它可能会失败,因为当你调用该函数时的主窗口可能不会在最前面的界面,如果LogiSteeringInitialize()返回false,初始化将会承受任何尝试下一个LogiUpdate()函数的调用。
当窗口在最前界面时和SDK可以初始化,LogiUpdate()将返回true。
SDK的使用示例
使用头文件和lib:
参考
罗技转向初始化窗口LogiSteeringInitializeWithWindow(获取窗体句柄)
boolLogiSteeringInitialize(CONSTboolignoreXInputControllers,HWNDhwnd)
所述LogiSteeringInitializeWithWindow()函数生成必要的初始化,如果没有另一个实例已经在运行。
只有你从你的代码中获得窗口的句柄才能使用此功能。
参数
忽略X输入Controlllers:
如果设置为true,该软件开发工具包将忽略任何的X输入控制器
HWND:
窗口句柄
返回参数
如果函数成功运行,返回为true,否则返回false
LOGI转向初始化LogiSteeringInitialize(主窗体初始化)
boolLogiSteeringInitialize(CONSTboolignoreXInputControllers)
该LogiSteeringInitialize()函数确保主窗口已经到了前面,如果这时没有其他实例运行,则进行必要的初始化
参数
忽略X输入Controlllers:
如果设置为true,该软件开发工具包将忽略任何的X输入控制器
返回参数
如果函数成功运行,返回为true,否则返回false
如果返回是假的,那是因为你的应用程序的主窗口还没有到最前面呢。
这意味着窗口处理程序还没有被检索。
LogiUpdate(主窗口设备跟新)
boolLogiUpdate();
该LogiUpdate()查找主窗口处理程序,如果已经发现力和控制器
保持连接最新的。
它被称为应用程序的每一帧。
返回参数
如果函数成功运行,返回为true,否则返回false
该函数将返回false,如果LogiSteeringInitialize()没有被调用,或者已无法找到主窗口句柄。
LogiGetState(获得设备状态)
DIJOYSTATE2*LogiGetState(constintindex);
s:
//msdn.microsoft./zh-cn/library/windows/apps/microsoft.directx_sdk.reference.dijoystate2.aspx
LogiGetState()返回结构体DIJOYSTATE2控制器的状态。
如果想使用这个实现从DirectInput到MicrosoftWindows工作,则它需要dinput.h。
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器
返回参数
DIJOYSTATE2结构包含设备的在坐标系中的位置信息,和POVs和按钮设备信息。
注意
如果不与DirectInput一起工作,则在你的游戏或项目中可以不包括dinput.h,请注意看一看这个功能:
LogiGetStateENGINES
LogiGetStateENGINES(获得设备简化状态)
DIJOYSTATE2ENGINES*LogiGetStateENGINES(constintindex);
所述LogiGetStateENGINES()是函数LogiGetState的简化版本。
如果不是与DirectInput一起工作的。
它返回DIJOYSTATE2结构的简化版本,称为DIJOYSTATE2ENGINES。
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器
返回参数
DIJOYSTATE2结构包含设备的在坐标系中的位置信息,和POVs和按钮设备信息有关为了更加细致,看看在头文件LogiSeeringWheel.h的信息。
LogiGetFriendlyProductName(获取设备名)
wchar_t*LogiGetFriendlyProductName(constintindex);
TheLogiGetFriendlyProductName()函数获得设备的名称。
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器
返回参数
字符串中包含设备的友好产品名称。
LogiIsConnected(设备是否已连接)
boolLogiIsConnected(constintindex);
该LogiIsConnected()函数检查游戏控制器是否连接在指定索引处
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器
返回参数
返回true,如果设备连接到特定的索引,否则返回false。
LogiIsDeviceConnected(是否连接到特定的设备)
boolLogiIsDeviceConnected(constintindex,constintdeviceType);
该LogiIsConnected()函数检查指定的设备是否连接在索引处
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器
设备类型:
设备检查的类型。
可能的类型:
oLOGI_DEVICE_TYPE_WHEEL
oLOGI_DEVICE_TYPE_JOYSTICK
oLOGI_DEVICE_TYPE_GAMEPAD
oLOGI_DEVICE_TYPE_OTHER
返回参数
返回true,如果设备连接到特定的索引,否则返回false。
LogiIsManufacturerConnected(制造商设备检测)
boolLogiIsManufacturerConnected(constintindex,constintmanufacturerName);
LogiIsManufacturerConnected()函数检查连接成功的设备索引是否由manufacturerName指定的制造商生成。
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器
manufacturerName:
制造设备的制造商的名称,可能的类型主要有:
oLOGI_MANUFACTURER_LOGITECH
oLOGI_MANUFACTURER_MICROSOFT
oLOGI_MANUFACTURER_OTHER
返回参数
如果特定生产商的PC控制器已经连接上,返回真,否则返回假
LogiIsModelConnected(设备型号检测)
boolLogiIsModelConnected(constintindex,constintmodelName);
该LogiIsModelConnected()函数检查设备连接的索引是否是指定型号
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器
型号名:
设备的型号名称,可能的型号名称:
oLOGI_MODEL_G27
oLOGI_MODEL_G25
oLOGI_MODEL_MOMO_RACING
oLOGI_MODEL_MOMO_FORCE
oLOGI_MODEL_DRIVING_FORCE_PRO
oLOGI_MODEL_DRIVING_FORCE
oLOGI_MODEL_NASCAR_RACING_WHEEL
oLOGI_MODEL_FORMULA_FORCE
oLOGI_MODEL_FORMULA_FORCE_GP
oLOGI_MODEL_FORCE_3D_PRO
oLOGI_MODEL_EXTREME_3D_PRO
oLOGI_MODEL_FREEDOM_24
oLOGI_MODEL_ATTACK_3
oLOGI_MODEL_FORCE_3D
oLOGI_MODEL_STRIKE_FORCE_3D
oLOGI_MODEL_RUMBLEPAD
oLOGI_MODEL_RUMBLEPAD_2
oLOGI_MODEL_CORDLESS_RUMBLEPAD_2
oLOGI_MODEL_CORDLESS_GAMEPAD
oLOGI_MODEL_DUAL_ACTION_GAMEPAD
oLOGI_MODEL_PRECISION_GAMEPAD_2
oLOGI_MODEL_CHILLSTREAM
返回参数
如果指定型号的控制器已经连接,返回为true,否则返回false
LogiButtonTriggered(按键检测)
boolLogiButtonTriggered(constintindex,constintbuttonNbr);
该LogiButtonTriggered()函数检查设备连接的索引是否是当前的指定触发按钮
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器
buttonNbr:
我们想要检查的按钮的号数,可能的号数为:
从0到127
返回参数
如果按钮已经触发返回为true,否则返回false
LogiButtonReleased(按键释放)
boolLogiButtonReleased(constintindex,constintbuttonNbr);
LogiButtonReleased()函数检查连接在设备上的索引是否已经释放指定的按钮。
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器
buttonNbr:
我们想要检查的按钮的号数,可能的号数为:
从0到127
返回参数
如果按钮已经触发返回为true,否则返回false
LogiButtonIsPressed
boolLogiButtonIsPressed(constintindex,constintbuttonNbr);
LogiButtonIsPressed()函数检查连接在设备上的索引是否是当前正在被按下的指定按钮。
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器
buttonNbr:
我们想要检查的按钮的号数,可能的号数为:
从0到127
返回参数
如果按钮已经触发返回为true,否则返回false
LogiGenerateNonLinearValues(LOGI生成非线性值)
boolLogiGenerateNonLinearValues(constintindex,constintnonLinCoeff);
这个LogiGenerateNonLinearValues()函数为游戏控制器轴生成非线性参数。
游戏轮/摇杆/游戏手柄和真正的方向盘具有非常不同的行为。
采用单匝车轮的理由是它们仅需要做到四分之三转锁来锁定的,真正的汽车采用3转。
这直接影响到转向比(15:
1到20:
1对于真正的汽车来说,但对于游戏轮只有4:
1).操纵杆和游戏手柄比真正的方向盘拥有更短的移动围。
因为这很小的转向传动比或短距离的移动围,游戏轮/游戏杆/游戏垫会高度敏感,这可能使游戏操作非常困难。
尤其是在以一个特定速度(倾向于前进或后退的速度)行驶在直线路段的时候,可能更加难。
解决这种问题的一种方法就是使用一个灵敏度曲线。
这是一条依靠速度来定义的游戏控制器灵敏度的曲线,这种类型的曲线通常用于游戏手柄,以弥补其很低的物理动作围。
运用这种曲线的作用是当汽车以高速行驶时汽车的轮胎转动的幅度会比汽车移动速度很慢时的幅度小。
例如汽车的车轮可能转动60度来锁定,在较低的速度的时候,但只要10度锁来锁定,在更高的速度的时候。
如果你计算10度锁定时的转向比,你会发现,如果你通过转180度来锁定一个方向盘,锁定比率等于180/10=18,这相当于一辆真正汽车的转向比。
如果灵敏度曲线已经车轮/操纵杆中使用,再加入非线性曲线可能不必要的。
但你可能发现即使应用敏感度曲线后,车子在一条直线上行驶的很快的时候,还是感觉有点颠簸。
这可能是因为在你的游戏中,你需要10度以上的锁去锁住,即使在高速度时。
或者,汽车是以非常高的速度在行驶,以至于以一个普通的转向比也不能消除这么高的灵敏度,在这一点上的最好方法是添加一个非线性曲线在灵敏度曲线的顶部。
有着正nonlincoeff的非线性曲线的作用是围绕在中心位置的车轮或游戏杆将会变得不是那么敏感。
然而,在锁定向左或向右位置时汽车的车轮会转过和没有非线性曲线时相同的量,因此,汽车在一条直线上行驶时变得更加容易控制,并且游戏操作将会得到提高。
也有这样的情况出现,车轮的感觉灵敏度不够,在这种情况下可能要增加一条具有逆效应的非线性曲线(使围绕在中心位置的转向更加敏感)通过使用负值nonLinCoeff来改善,这种方法让你定义一个非线性系数,这个系数决定这条曲线的作用的强弱,当运行这种方法时,将会以阵列的形式产生一个映射表,对于这个阵列中的每1024个元素,会有其可以用作车轮/操纵杆的轴线位置上的相应的非线性值,而不是原始的值。
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器
nonLinCoeff:
采用的非线性程度的一个值,围从-100到100,0表示是线性曲线,100表示最大的非线性曲线与中心位置具有低的敏感度,-100表示最大的非线性曲线且中心位置具有高的敏感度。
返回参数
成功则返回true,否则返回false
LogiGetNonLinearValue(获得非线性值)
intLogiGetNonLinearValue(constintindex,constintinputValue);
LogiGetNonLinearValue()函数返回值从一个先前产生的非线性值组成的表格中的数,这个数可以看成是方向盘的响应。
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器。
inputValue:
值的围是-32768到32767,对应轴的原始值。
返回参数
值的围是-32768到32767之间,对应先前用GenerateNonLinearValues()函数设定的非线性水平值
LogiHasForceFeedback(是否含有力反馈)
boolLogiHasForceFeedback(constintindex);
这个TheLogiHasForceFeedback()函数检查索引控制器是否有力反馈。
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器。
返回参数
如果设备能进行力反馈则返回true,否则返回false。
LogiIsPlaying(力反馈是否发挥作用)
boolLogiIsPlaying(constintindex,constintforceType);
这个LogiIsPlaying()函数检查是否有某个力正在发挥作用。
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器。
力的类型:
o-LOGI_FORCE_SPRING
o-LOGI_FORCE_CONSTANT
o-LOGI_FORCE_DAMPER
o-LOGI_FORCE_SIDE_COLLISION
o-LOGI_FORCE_FRONTAL_COLLISION
o-LOGI_FORCE_DIRT_ROAD
o-LOGI_FORCE_BUMPY_ROAD
o-LOGI_FORCE_SLIPPERY_ROAD
o-LOGI_FORCE_SURFACE_EFFECT
o-LOGI_FORCE_CAR_AIRBORNE
返回参数
如果力正在发生作用则返回true,否则返回false
LogiPlaySpringForce(力作用)
boolLogiPlaySpringForce(constintindex,constintoffsetPercentage,constintsaturationPercentage,constintcoefficientPercentage);
这个LogiPlaySpringForce()函数作用是表示弹簧力开始
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器。
OffsetPercentage:
指定的弹簧力作用的中心,有效围为-100至100。
指定0为弹簧的中心位置。
超出此围的任何值弹簧将静止不动。
saturationPercentage:
指定弹力效果饱和的水平。
经过中心位置一定的偏差后,饱和水平保持不变,这相当于一个幅度。
有效围为0到100,任何值高于100的值弹簧将静止不动。
coefficientPercentage-表示效果强度增加的斜率和中心位置处的条件有关。
值越高意味着,到达饱和水平越快。
有效围为-100到100,任何值超出有效围弹簧将静止不动。
返回参数
成功返回true,否则返回false
注意
动态的弹簧力将在X轴上发挥作用,如果游戏杆已经被连接,则所有由方向盘SDK产生的力都作用X轴上,另外会有一个恒定的弹簧在Y轴上。
LogiStopSpringForce
boolLogiStopSpringForce(constintindex);
这个LogiStopSpringForce()函数停止弹簧力
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器。
返回参数
成功返回true,否则返回false
LogiPlayConstantForce
boolLogiPlayConstantForce(constintindex,constintmagnitudePercentage);
这个LogiPlayConstantForce()函数产生恒力
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器。
magnitudePercentage:
指定的恒力作用的大小。
负值表示力作用的方向相反。
有效围为是-100到100,任何超出有效围的值都将不产生作用。
返回参数
成功返回true,否则返回false
注意
如果采用物理引擎的值来不断更新恒力的值,此时效果最好,将方向盘和游戏杆通过一个矢量力来和汽车引擎绑定在一起,这会产生一个弹簧的效果,一个滑动的效果,产生汽车惯性的感觉,依赖物理引擎,它也应该产生侧面的碰撞效果(汽车的一个面撞到墙壁后,轮或操纵杆应在相反的方向颤动),这个矢量力可以根据前轮胎测量的横向力来计算。
这个矢量力应该为0,当停止或是行驶在直线的时候。
当转弯或是通过倾斜的表面时,这个矢量力应该以成比例的方式增加。
LogiStopConstantForce(终止恒力作用)
boolLogiStopConstantForce(constintindex);
这个LogiStopConstantForce()函数停止恒力
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器。
返回参数
成功返回true,否则返回false
LogiPlayDamperForce
boolLogiPlayDamperForce(constintindex,constintcoefficientPercentage);
这个LogiPlayDamperForce()函数产生阻尼力
参数
索引:
游戏控制器的索引。
索引0对应连接的第一个游戏控制器。
索引1对应第二个游戏控制器。
coefficientPercentage:
表示效果强度增加的斜率和中心位置处的条件有关。
值越高意味着,到达饱和水平越快。
有效围为-100到100,任何值超出有效围弹簧将静止不动。
-100模拟一个很平滑的效果,100使得轮子和操纵杆很难移动,模拟车子停止或是陷在泥潭里
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 游戏 方向盘 软件 开发 工具包