【问题标题】:SDL 2 C# - Opening a joystick deviceSDL 2 C# - 打开操纵杆设备
【发布时间】:2014-01-17 12:23:25
【问题描述】:

我正在尝试将我的一个旧项目从 DirectX 移植到 SDL2。我正在使用 SDL2-CS,因为我可以找到的唯一其他绑定是 C# SDL2,它似乎已经过时(最后一个不稳定版本是 2010 年的 6.1.1beta,最后一个稳定版 - 2008 年的 6.1.0)

操纵杆(Logitech Force 3D Pro/Logitech Attack 3)功能齐全,可在 Windows 中使用 SDL2 和 DirectX 10 在 Linux 中运行。这是我在 C# 中的 Joystick-Hello-world(使用 VS2010 中的默认控制台应用程序项目;对 SDL2-CS.dll 的引用(SDL2.dll 也存在于创建 EXE 的文件夹中)也在那里并且编译/运行没有任何错误):

    using System;
    using System.Collection.Generic;
    using System.Linq;
    using System.Text;
    using SDL2;

    namespace Joystick_In_SDL_2_For_CSharp
    {
       class Program
       {
          static void Main(string[] args)
          {
             SDL.SDL_Init(SDL.SDL_INIT_EVERYTHING);
             IntPtr myJoystick = SLD.SDL_Joystick(0);

             if(myJoystick == IntPtr.Zero)
                System.Console.WriteLine("Ooops, something fishy's goin' on here!" + SDL.SDL_GetError());
             else
                System.Console.WriteLine("You have successfully loaded the joystick \"" + SDL.SDL_JoystickName(myJoystick) + "\"");

             SDL.SDL_JoystickClose(myJoystick);
          }
       }
    }

控制台显示“Ooops”消息,SDL.SDL_GetError() 的结果是有 0 个操纵杆可用,名称自然 = null。至少在我的 Linux 设备索引中一直是 == 0(我用 1,2,3... 进行了测试),因为在某个时间点我只有一个操纵杆连接到我的笔记本电脑。我还需要添加更多内容吗?欢迎提出想法、提示和/或批评!

谢谢, 澳洲联储

【问题讨论】:

  • 您可能可以删除整个第一段,因为它并没有真正增加问题(除了可能使人们跳过您的问题的大块文本)。尽管保留您正在测试的控制器类型,因为这可能很重要。
  • 谢谢。改了第一段。将保留有关从 DirectX 移植到 SDL2 和 C# 的其他 SDL2 绑定的信息,因为如果有的话,有人可能会建议更好的 SDL2-C# 绑定。

标签: c# windows joystick sdl-2


【解决方案1】:

这个问题的解决方案是由 Github 上的 SDL2 C# 包装器 - flibitijibibo 的维护者提供给我的。他指出,他曾在某处读到 Windows 需要 main() 的 [STAThread] 属性才能使 SDL2 游戏杆(我想也是 SDL2 游戏控制器)在 Windows 上工作。遗憾的是,如果您使用的是 Linux 和 Mono,无论有没有上述属性,这都不会改变这种情况。这是由于对硬件进行了一些隐藏的深层处理,遗憾的是这也转化为 API。

[STAThread]
static void Main(string[] args){ ... }

【讨论】:

    猜你喜欢
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多