Rehberler

XInput ve DirectInput: Bir kontrolcü neden bazı oyunlarda çalışıp bazılarında çalışmaz?

Kolunuz bir oyunda kusursuz çalışıyor, bir sonrakinde ise hiç tanınmıyor. Sebep çoğu zaman oyunun beklediği giriş arayüzüdür. XInput ve DirectInput nedir ve iki tarafı nasıl anlaştırırsınız, bu rehberde anlatıyoruz.

PC'de sık duyulan bir şikâyet: Kontrolcü bir oyunda çalışıyor, başka bir oyunda hiçbir şey yapmıyor, üçüncüsünde ise tuhaf davranıyor. Donanım genellikle sağlamdır. Değişen şey, her oyunun Windows'tan kontrolcü girdisini isteme biçimidir. Bu konuyu hâlâ büyük ölçüde iki programlama arayüzü belirler: XInput ve DirectInput. Bir oyunun ve bir cihazın hangisini kullandığını bilmek, bu uyumsuzlukların çoğunu açıklar.

XInput nedir?

XInput, Microsoft'un Xbox tarzı kontrolcüler için geliştirdiği arayüzdür. Windows için Xbox 360 kontrolcüsüyle birlikte tanıtıldı ve sabit bir düzen varsayar: iki analog çubuk, iki analog tetik, bir yön tuşu, A/B/X/Y tuşları, iki omuz tuşu, Back/View ve Start/Menu, iki çubuk tıklaması ve iki titreşim motoru. Aynı anda en fazla dört kontrolcüyü destekler.

Düzen hiç değişmediği için XInput, geliştiriciler açısından çok pratiktir. Oyun, “A” tuşunun her zaman aynı yerde olduğunu ve tetiklerin ayrı eksenler olduğunu bilir; böylece doğru tuş simgelerini gösterebilir ve bir kurulum ekranına ihtiyaç duymaz. Bu sadelik aynı zamanda sınırıdır: Çok sayıda tuşu olan bir direksiyon, ek eksenleri olan bir gaz kolu veya uçuş joystick'indeki bir hat düğmesi gibi Xbox düzenine uymayan hiçbir şey XInput ile tanımlanamaz.

DirectInput nedir?

DirectInput, 1990'lardan beri DirectX'in parçası olan daha eski ve daha esnek arayüzdür. Sabit bir düzen yerine cihaz, Windows'a neye sahip olduğunu bildirir: belirli sayıda eksen, tuş ve POV hat. Oyun da mevcut olanı okur ve genellikle işlevleri bir tuş atama menüsünden belirlemenize izin verir. DirectInput aynı zamanda force feedback efektlerini de kapsar; direksiyonların ona bağımlı olmasının nedeni budur.

Direksiyonlar, pedallar, joystick'ler, HOTAS gaz kolları, buton kutuları ve birçok jenerik veya eski gamepad kendini DirectInput cihazı olarak tanıtır. Windows'ta joy.cpl açıp eksenlerden ve numaralı tuşlardan oluşan bir liste gördüğünüzde, tam olarak bu tür bir cihaz tanımına bakıyorsunuz.

Kontrolcü neden bir oyunda çalışıp diğerinde çalışmaz?

Modern PC oyunlarının çoğu, özellikle konsol uyarlamaları ve aksiyon oyunları, XInput temel alınarak geliştirilir. Xbox tarzı bir kontrolcü beklerler ve diğer her şeyi çoğu zaman yok sayarlar. Yarış ve uçuş simülasyonları ise tersini yapar: Direksiyon, pedal, vites ve buton kutusunu ya da joystick, gaz kolu ve dümen pedallarını birlikte kullanabilmeniz için DirectInput cihazlarını listelerler.

  • Yalnızca XInput destekleyen bir oyunda jenerik bir DirectInput gamepad: joy.cpl içinde çalışsa bile oyun onu hiç görmez.
  • DirectInput desteği olmayan bir oyunda direksiyon veya HOTAS: Sonuç aynıdır. Bazı cihazlarda Xbox veya PC modu bulunur, ancak kendini gamepad olarak tanıtan bir direksiyon, onu kullanışlı kılan özelliklerin çoğunu kaybeder.
  • Eski bir DirectInput oyununda Xbox kontrolcüsü: Genellikle çalışır, çünkü Windows XInput kontrolcülerini DirectInput üzerinden de sunar. Ancak bilinen eski bir tuhaflık vardır: Bu şekilde okunduğunda Xbox 360 tarzı bir kontrolcü iki tetiği tek bir ortak eksende bildirir. İkisine birden bastığınızda birbirlerini sıfırlar ve oyun “ikisi de basılı” ile “hiçbiri basılı değil” durumlarını ayırt edemez.
  • PlayStation ve Switch kontrolcüleri: Bunlar XInput cihazı değildir. Onları doğrudan destekleyen oyunlar sorunsuz çalışır; diğerleri için bir çeviri katmanı gerekir.

Windows'ta bunlardan daha yeni giriş arayüzleri de vardır ve birçok oyun bunların üzerine kurulu, oyun motoruna ait giriş kütüphaneleri kullanır. Pratikte bunlar da gamepad'ler ile diğer kontrolcü türlerini birbirinden ayırır; bu yüzden oyuncu olarak bu ayrımı çoğu zaman yine fark edersiniz.

Karşılaştırma

XInputDirectInput
DüzenSabit Xbox düzeniCihaz tarafından belirlenir
Cihaz sayısıEn fazla dört kontrolcüAynı anda çok sayıda cihaz
Tetiklerİki ayrı analog eksenCihaza bağlı (Xbox 360 tarzı kollarda ortak eksen)
Force feedbackİki titreşim motoruTam efektler, direksiyonlarda kullanılır
Tipik cihazlarXbox ve Xbox uyumlu gamepad'lerDireksiyon, pedal, joystick, HOTAS, jenerik kollar
Tipik oyunlarModern aksiyon oyunları, konsol uyarlamalarıYarış ve uçuş simülasyonları, eski oyunlar

Çeviri katmanları nasıl yardımcı olur?

Bir çeviri katmanı kontrolcünüzü okur ve oyuna farklı türde sanal bir kontrolcü sunar. En yaygın olanı Steam Input'tur. Steam üzerinden başlattığınız oyunlarda PlayStation, Switch veya jenerik bir kontrolcüyü Xbox tarzı bir kontrolcü gibi gösterebilir ve tuşları oyun bazında yeniden atamanıza olanak tanır. Steam'in kontrolcü ayarlarında kontrolcü türüne göre etkinleştirilir ve her oyunun özelliklerinden ayrıca değiştirilebilir.

Üçüncü taraf tuş atama ve emülasyon araçları da mevcuttur; bunların bir kısmı sanal kontrolcü sürücüleri kurar. Faydalı olabilirler, ancak araya bir katman daha eklerler ve bu da çift girdilere, Steam Input ile çakışmalara veya güncellemelerden sonra sorunlara yol açabilir.

Önce resmî yazılım

Bir tuş atama aracı kurmadan önce cihazınızda Xbox/PC mod anahtarı veya XInput desteği ekleyen bir üretici uygulaması olup olmadığını kontrol edin. Yine de üçüncü taraf bir araç kullanacaksanız onu yalnızca resmî proje sayfasından indirin, aynı anda tek bir araç çalıştırın ve artık kullanmadığınızda düzgünce kaldırın.

Tarayıcılar kontrolcüleri nasıl görür?

Tarayıcılar XInput veya DirectInput'u web sayfalarına açmaz. Kontrolcüleri işletim sistemi üzerinden okur ve Gamepad API aracılığıyla sayfaya iletir. Tarayıcı bir cihazı normal bir gamepad olarak tanırsa "standard" eşlemesini bildirir: Tuşlar ve eksenler, Xbox/PlayStation düzenine karşılık gelen bilinen bir sırada gelir. Direksiyonlar, joystick'ler ve tanınmayan kollar içinse ham düzeni bildirir; tuşlar ve eksenler, cihazın kendisi onları hangi sırayla tanımlıyorsa o sırada gelir.

Bu yüzden gamepad testimiz bir kontrolcüyü bazen düzenli bir tuş şemasıyla, bazen de numaralı tuş ve eksenlerden oluşan sade bir liste olarak gösterebilir. İkisi de normaldir. Kontrolcü oyunlarda çalışıyor ama tarayıcıda hiç görünmüyorsa tarayıcının algılamadığı kontrolcüler rehberimizi izleyin.

Sorun giderme kontrol listesi

  1. Windows'un cihazı görüp görmediğini kontrol edin: Win + R tuşlarına basın, joy.cpl yazın ve Özellikler bölümünde girdileri test edin.
  2. Oyunun neyi desteklediğini öğrenin. Mağaza sayfası, ayarlar menüsü veya kılavuz genellikle yalnızca gamepad mi yoksa direksiyon ve joystick de mi desteklendiğini belirtir.
  3. Cihazda mod anahtarı varsa oyunun beklediğine uygun Xbox veya PC modunu deneyin.
  4. Steam oyunlarında Xbox dışındaki kontrolcüler için Steam Input'u etkinleştirin; çift girdi görürseniz ilgili oyun için devre dışı bırakın.
  5. Diğer tuş atama araçlarını ve oyun içi arayüz katmanlarını kapatın, ardından kontrolcüyü yeniden bağlayın.
  6. Direksiyon ve HOTAS için üreticinin sürücüsünü kurun ve cihazın doğru listelendiğini kontrol edin. Bkz. direksiyon PC'de algılanmıyor.
  7. Girdiler tanınıyor ama yanlış atanıyorsa varsayılan eşlemeye güvenmek yerine oyundaki tuş atama menüsünü kullanın.

XInput, DirectInput'tan daha mı iyi?

Genel olarak hiçbiri daha iyi değildir. XInput daha basittir ve oyunlara öngörülebilir bir gamepad düzeni sunar. DirectInput daha esnektir ve direksiyonlar, joystick'ler ve force feedback efektleri için gereklidir. Farklı cihazlara uygundurlar.

Xbox kontrolcümün tetikleri eski bir oyunda neden tek eksen gibi davranıyor?

Oyun kontrolcüyü DirectInput üzerinden okuyor; burada Xbox 360 tarzı kolların tetikleri tek bir ekseni paylaşır. Oyunda bir XInput seçeneği, güvenilir bir kaynaktan topluluk yaması arayın veya Steam Input ile bir tuş ataması kullanın.

Kontrolcümün XInput mu DirectInput mu olduğu tarayıcı için önemli mi?

Doğrudan değil. Tarayıcı ikisini de Gamepad API üzerinden sunar. Fark edeceğiniz tek fark, standart eşlemeyi mi yoksa tuş ve eksenlerden oluşan ham bir listeyi mi bildirdiğidir.