我正在尝试将我的旧项目从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测试过...),因为我在某个时间点只有一个操纵杆连接到我的笔记本。我还需要添加更多内容吗?欢迎提出想法,提示和/或批评!
谢谢, RBA
答案 0 :(得分:0)
这个问题的解决方案是由Github上的SDL2 C#包装器的维护者给我的 - flibitijibibo。他指出,他曾在某处读过Windows需要main()的[STAThread]属性,以便在Windows上运行SDL2-joystick(我想也是SDL2-gamecontroller)。遗憾的是,如果您使用的是Linux和Mono,无论上下提到的属性是否有效,这都不会改变这种情况。这是由于对硬件的一些隐藏的深层处理,这也很遗憾地转化为API。
[STAThread]
static void Main(string[] args){ ... }