2014-01-17 3 views
1

Я пытаюсь перенести старый проект из DirectX на SDL2. Я использую SDL2-CS, потому что единственное, что мне удалось найти, это C# SDL2, который, кажется, устарел (последняя неустойчивая версия - 6.1.1beta в 2010 году, последняя стабильная - 6.1.0 в 2008 году)SDL 2 C# - Открытие джойстика

Джойстик (Logitech Force 3D Pro/Logitech Attack 3) полностью функциональен и работает в Linux с использованием SDL2 и DirectX 10 в Windows. Вот мой Joystick-Hello-world в C# (с использованием проекта Console Application по умолчанию в 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); 
      } 
     } 
    } 

Console отображает "Упс" -message, результат SDL.SDL_GetError() является есть 0 джойстики доступны и имя естественно = NULL. По крайней мере, для индекса Linux для меня всегда было == 0 (я тестировал с 1,2,3 ...), потому что у меня только один джойстик, подключенный к моему ноутбуку в определенный момент времени. Должен ли я добавить что-то еще? Идеи, советы и/или критика приветствуются!

Спасибо, RBA

+0

Возможно, вы удалите весь первый абзац, так как на самом деле он не добавляет большого значения вопросу (кроме большого блока текста, который может заставить людей пропустить ваш вопрос). Хотя вы оставляете типы контроллеров, на которых вы тестируете, поскольку это может быть важно. –

+0

Спасибо. Изменен первый абзац. Будет содержать информацию о портировании с DirectX на SDL2 и на другое SDL2-привязку для C#, хотя, поскольку кто-то может предложить лучший SDL2-C# -связывание, если он есть. – rbaleksandar

ответ

0

Решение этой проблемы был дан мне сопровождающими # обертка SDL2 C на Github - flibitijibibo. Он отметил, что он где-то читал, что для Windows требуется атрибут [STAThread] для main(), чтобы получить SDL2-джойстик (я полагаю, также SDL2-gamecontroller), работающий в Windows. К сожалению, это не меняет ситуацию, если вы используете Linux и Mono, где с указанным выше атрибутом или без него он не работает. Это связано с некоторой скрытой глубокой обработкой аппаратного обеспечения, что, к сожалению, также относится к API.

[STAThread] 
static void Main(string[] args){ ... } 
Смежные вопросы