问题 使用SLIMDX让DPAD工作

Badger101.

成员
加入
12月14日,2020年
消息
20
编程经验
Beginner
我是使用Slimdx for DirectX输入我拿到了按钮工作和操纵杆,但如果D垫左按下它,我无法获得DPAD,如果右按下移动光标,则将光标移动到左侧。
 

附件

  • code.txt.xt.
    3.8 KB · Views: 9

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,159
地点
挪威
编程经验
10+
我之前没有使用任何类型的DX,但我测试了你的代码,它适用于我。我的游戏手柄有一个用于DPAD和左模拟棒的切换按钮,如果您的响应也是如此。

没有影响操作的代码有一些问题,但我会提到它们:
  • 您有冗余GetSticks在构造函数中调用(第2行而不使用返回)并形成负载。
  • 由于这是非托管对象,您应该确保在表单关闭时输出,显示4个未侧面的对象。
  • 按钮下来/向上的逻辑不对,它只在按下按钮并重复按钮时,而不像一次下降 &起来,看看我的例子附上我如何解决这个问题。
进一步的SLIMDX被Nuget推荐弃用(最后更新2013年),建议使用SharpDX作为更换。 Sharpdx更新,非常相似,也停止于2019年被开发/维护,但我还没有找到另一个图书馆。
我使用sharpdx附加了example表单的代码(从nuget安装sharpdx.directinput。
 

附件

  • code2.txt.
    3.3 KB · Views: 8

Badger101.

成员
加入
12月14日,2020年
消息
20
编程经验
Beginner
我之前没有使用任何类型的DX,但我测试了你的代码,它适用于我。我的游戏手柄有一个用于DPAD和左模拟棒的切换按钮,如果您的响应也是如此。

没有影响操作的代码有一些问题,但我会提到它们:
  • 您有冗余GetSticks在构造函数中调用(第2行而不使用返回)并形成负载。
  • 由于这是非托管对象,您应该确保在表单关闭时输出,显示4个未侧面的对象。
  • 按钮下来/向上的逻辑不对,它只在按下按钮并重复按钮时,而不像一次下降 &起来,看看我的例子附上我如何解决这个问题。
进一步的SLIMDX被Nuget推荐弃用(最后更新2013年),建议使用SharpDX作为更换。 Sharpdx更新,非常相似,也停止于2019年被开发/维护,但我还没有找到另一个图书馆。
我使用sharpdx附加了example表单的代码(从nuget安装sharpdx.directinput。
您提供的代码无需错误,但我没有得到任何操作,并且通过我的代码,我能够使用操纵杆移动鼠标光标,如果光标超过一个按钮,我将能够使用gamepad按钮即可使用gamepad按钮代码中的衍射率,但我的尝试将其改为为我需要的东西工作,请帮助
 

附件

  • code3sharpdx.txt.
    3.5 KB · Views: 5

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,159
地点
挪威
编程经验
10+
使用我的代码,我能用操纵杆移动鼠标光标
现在我说的是你说的开幕式 你的代码 没有用DPAD移动鼠标。现在做了吗?那么你的代码有什么问题?
您提供的代码适用于没有错误,但我没有得到任何操作
isnt working
"Isn't working"对任何事情不是一个充分的描述。在 我的代码 添加了一些控制台.Wortelines用于调试,您在窗口中看到了什么?您是否挂钩了表单加载/关闭和计时器勾选事件的活动? (和按钮单击如果使用该),您是否取消了输出x / y值的第63行?
 

Badger101.

成员
加入
12月14日,2020年
消息
20
编程经验
Beginner
是的,我正确地搞定了这个事件,定时器和尝试了取消关注第63行,但是为什么你编写控制台写道,我正在使用Windows窗体没有什么时候在我的窗口中取消注释第63行时,我有一个带有2个按钮的表单,我运行时有2个按钮代码SLIM DX您可以使用操纵杆移动鼠标光标,鼠标留在窗口的界限,当光标通过按钮时,您可以使用GamePad单击它,但是当我运行时,您的代码不做任何事情不会移动鼠标或保持它在窗口界限或允许我单击代码完全不起作用的任何按钮
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,159
地点
挪威
编程经验
10+
你为什么要编写控制台写入
查看Visual Studio中立即Windows中的调试信息,如上所述。如果我想看到它,我会看到设备检测的输出,然后单击行为,以及x / y信息。
您的代码完全不起作用
在与我的相同的工作中,既可以移动和单击一样。
 

Badger101.

成员
加入
12月14日,2020年
消息
20
编程经验
Beginner
我无法获取任何信息x,y使用console.writeline只是我的常规表单窗口,但如果我放置debug.log我可以看到调试器中的值x,y,但值x,y不要用操纵杆改变动作我尝试重新安装Sharpdx相同的结果
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,159
地点
挪威
编程经验
10+
我有选择"将所有输出重定向到立即窗口"启用,如果您不输出输出窗口。
我可以在调试器中看到值x,y
那是什么。请记住,每个定时器滴答有一个输出线,默认情况下,每秒10行,尝试持有dpad向左/向右/向下移动一段时间,以查看这些方向的重复值,这将显示边框值,我会触发到边界值设置在集合范围内的值+/- 100。 IF语句是避免在没有移动的情况下为大量的轮询时间设置游标(x 0 y 0带我的垫)。
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,159
地点
挪威
编程经验
10+
当没有移动时(x 0 y 0带我的垫)
如果您具有相同的零位置(x 0 y 0)并且具有比+/- 100的不同方向值,您也可以将IF语句交换为 if (!(state.X==0 && state.Y == 0))
 

Badger101.

成员
加入
12月14日,2020年
消息
20
编程经验
Beginner
我想出了我试图使用2.4 GHz无线遥控器的问题,该远程是一个USB插头,这是游戏手的Receiver,它不适用于您的代码,而是一个USB有线Gamepad工作,我的代码是我的代码,我'我不确定为什么会有所作为吗?
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,159
地点
挪威
编程经验
10+
Line 40 at input.GetDevices, try changing first argument to DeviceClass.GameControl, which is the comparable type and value you used in SlimDX. In code I posted I used DeviceType, which is a more specialized enum, I'm sure you can find a DeviceType value that works for the wireless pad also. Here you can see a comparison table of those enums for both libraries:
1609501940999.png.
1609501954466.png.


好奇地,我的USB GamePad也被检测为deviceType.joystick(和.controldevice),但不是deviceType.gamepad :)
 

Badger101.

成员
加入
12月14日,2020年
消息
20
编程经验
Beginner
我得到了通过将devicetype更改为gamepad而不是操纵杆的游戏手按钮,而是移动光标的DPAD不起作用,我尝试了所有其他设备类型仍然无法正常工作,而且我无法弄清楚为什么
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,159
地点
挪威
编程经验
10+
DeviceClass.GameControl 你在slimdx中的情况也是如此。

"doesn't work"/"not working"不是准确的描述。所以当你尝试输出x / y时,你没有输出,或者只有0/0?如果您获得0/0并过滤器,则不会得到任何输出?

我还在这里附加更新的代码,其中包括:
  • 使用缓冲状态更新按钮,这使得整个众多更容易(并且仍然使用DPAD的当前状态) 缓冲和立即数据
  • 删除mouse_event并根据MS文档使用SendInput API,说明"注意此功能已被取代。使用SendInput。"
The buffer may make your debugging easier because it will report all state changes and not just current state. Try uncomment line 68 (Debug.WriteLine(update.ToString()); in CheckBufferAndCurrentState) here and use dpad directions, what do you see?
 

附件

  • code3.txt.
    4.2 KB · Views: 5
最佳 底部