2014-01-17 70 views
1

我試圖將我的一箇舊項目從DirectX移植到SDL2。我正在使用SDL2-CS,因爲我唯一可以找到的其他綁定是C#SDL2,它似乎已過時(2010年最後一個不穩定版本爲6.1.1beta,最後一個穩定版本 - 2008年爲6.1.0)SDL 2 C# - 打開操縱桿設備

操縱桿(Logitech Force 3D Pro/Logitech Attack 3)功能齊全,可在Windows環境下使用SDL2和DirectX 10工作。這裏是我在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」 -message,從SDL.SDL_GetError()的結果是現有0操縱桿可用和名稱是自然= NULL。至少在Linux設備索引中我一直都是== 0(我測試過1,2,3 ...),因爲我在某個時間點只有一個操縱桿連接到我的筆記本。我需要添加更多東西嗎?想法,技巧和/或批評是最受歡迎的!

感謝, RBA

+0

您可能會刪除整個第一段,因爲它沒有真正添加太多的問題(除了大塊的文字可能會讓人跳過你的問題)。雖然確實會留下正在測試的控制器類型,但這可能很重要。 –

+0

謝謝。改變了第一段。將保留有關從DirectX移植到SDL2以及用於C#的其他SDL2綁定的信息,不過因爲有人可能會建議更好的SDL2-C#綁定(如果有)。 – rbaleksandar

回答

0

這個問題的解決方案是給我通過Github上的SDL2 C#包裝的維護者 - flibitijibibo。他指出,他曾經在某個地方讀過Windows要求main()的[STAThread]屬性,以便獲得在Windows上工作的SDL2遊戲杆(我想也是SDL2-gamecontroller)。可悲的是,這並不會改變這種情況,如果你使用的是Linux和Mono,其中有或沒有上述屬性它不起作用。這是由於硬件的一些隱藏的深層處理,這可悲地轉化爲API。

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