NASIL ÇALIŞIR
JoyCheck kumandanı nasıl okur
JoyCheck, kumandanı W3C Gamepad API üzerinden okuyan, tarayıcı tabanlı bir kumanda test aracıdır; kurulum yok ve sunucuya hiçbir şey gönderilmez. Canlı veri akış diyagramı ve kod örnekleri aşağıda.

JoyCheck, kumandanı W3C Gamepad API üzerinden okuyan, tarayıcı tabanlı bir kumanda test aracıdır; kurulum yok ve sunucuya hiçbir şey gönderilmez.
6 giriş türü · 4 bölüm · 10 dk okuma
JoyCheck kumandanı W3C Gamepad API[1] ile okur; bu, her tuşu, her analog ekseni ve her tetiği saniyede 60 kez güncellenen sayısal değerler olarak sunan, tarayıcı yerlisi bir arayüzdür. USB ya da Bluetooth el sıkışmasını tarayıcı yürütür; JoyCheck her animasyon karesinde navigator.getGamepads() sorgular ve canlı durumu, hiçbir sunucuya veri göndermeden işler.
◆ DOĞRULANDI
W3C Gamepad API belirtimi, normalleştirilmiş analog aralıkları -1.0 ile +1.0 olarak tanımlar ve bağlı her kumandayı navigator.getGamepads() üzerinden her modern tarayıcıya sunar[1]. JoyCheck, tarayıcının başka herhangi bir web uygulamasına sunacağı verinin tam olarak aynısını okur; arada hiçbir kurulum aracı, sürücü ya da telemetri katmanı yoktur.
Kaynak: W3C Gamepad API belirtimi
2026-05-27 tarihinde Taimoor Bamazai tarafından güncellendi; Elites Algorithm Limited (Dublin, İrlanda’da kayıtlı bir teknoloji şirketi) kurucusu ve JoyCheck’in arkasındaki mühendis.
Önemli çıkarımlar
- JoyCheck kumandaları W3C Gamepad API üzerinden okur; bu, her modern oyunun kullandığı tarayıcı yerlisi arayüzün aynısıdır.
- Tarayıcı kumandaları animasyon karesi temposunda örnekler: standart ekranlarda 60 Hz, yüksek yenileme hızlı olanlarda 120 ila 144 Hz.
- Gamepad API kumandaları sunmadan önce bir kullanıcı hareketi ister; bu yüzden sayfayı uyandırmak için bir tuşa basman gerekir.
- Kumanda ile sayfa arasında hiçbir kurulum aracı, sürücü ya da telemetri katmanı yoktur; veriler makinenden asla ayrılmaz.
- Tarayıcı desteği Chrome, Edge, Firefox, Brave ve Vivaldi genelinde tutarlıdır[4]; haptik konusunda Safari yalnızca kısmen destekler.

Canlı veri akışının adı anılmaya değer üç özelliği vardır:
- Tarayıcı yerlisi. Standart W3C Gamepad API. Yerel ikili yok, sürücü kurulumu yok. Her modern Chromium tarayıcısında, Firefox’ta ve Safari 16+ sürümünde çalışır.
- 60 ila 144 Hz örnekleme. JoyCheck navigator.getGamepads() değerini her animasyon karesinde, yani tarayıcının yeniden çizdiği tempoda okur; ekranının Hz değerine uyar.
- Sıfır veri gönderimi. Her giriş kendi tarayıcı sürecinde işlenir. Widget’ta XHR yok, fetch yok, analitik yok. DevTools içinde doğrulanabilir.
Bir oyun kumandasını “okumak” ne demek?
JoyCheck kumandandan altı sınıf giriş okur ve her biri Gamepad API’nin belirli bir alanına karşılık gelir.
- Tuşlar (
gamepad.buttons[]). Her tuş, basılı durumunu ve desteklendiği yerde bir analog değeri bildiren bir GamepadButton nesnesidir. - Analog çubuklar (
gamepad.axes[0..3]). axes dizisi düz bir float dizisidir. W3C standart eşlemesi altında sol ve sağ çubuğun X/Y konumlarını tutar. - Tetikler (
gamepad.buttons[6,7].value). Tetikler buttons dizisinde yer alır ve standart eşleme altında analog değeri olan tuşlar gibi ele alınır. - Dokunmatik yüzey (
gamepad.touchEvents[]). DualShock 4 ve DualSense, dokunmatik yüzey koordinatlarını Gamepad API’ye bir uzantı olarak sunar. Dokunmatik yüzeyin bildirilen çözünürlüğü yaklaşık 1920×1080’dir ve aynı anda en fazla iki dokunuş noktası izlenir. - Jiroskop ve IMU (
gamepad.imu, önerilmiş). DualSense, Joy-Con ve Switch Pro hepsi altı eksenli IMU verisi sunar. - Titreşim (
gamepad.vibrationActuator.playEffect()). Bir Gamepad nesnesindeki vibrationActuator arayüzü, haptik aktüatör bildiren standart kumandalarda her motor için bir süre ve yoğunluk alan bir playEffect() metodu sunar.
W3C Gamepad API gerçekte nasıl çalışır?
Gamepad API, bağlı oyun kumandalarını JavaScript’e sunan bir W3C standardı tarayıcı arayüzüdür. Chrome 21 (2012), Firefox 29 (2014), Edge 12 (2015) ve Safari 14.1’den (2021) beri her modern tarayıcıda bulunur; güncel destek matrisi için Can I Use sayfasına bak.[2]
Alttaki USB ya da Bluetooth HID el sıkışmasını tarayıcı yürütür. İşletim sistemin kumandayı eşleştirir; tarayıcı onu işletim sistemi düzeyindeki sürücü katmanları üzerinden görür (Windows’ta XInput, macOS’ta IOHIDDevice, Linux’ta evdev); sayfa navigator.getGamepads() çağırır ve bir Gamepad nesneleri anlık görüntü dizisi alır.
Her Gamepad nesnesi bir dizi alan sunar:
- id: bir dize tanımlayıcı (ör. “DualSense Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 0ce6)”)
- axes[]: analog eksen konumlarını içeren bir float dizisi (çubuklar, tipik olarak dört giriş: sol X/Y + sağ X/Y)
- buttons[]: her biri pressed, value ve touched özelliklerine sahip GamepadButton nesnelerinden oluşan bir dizi
- timestamp: son güncelleme zamanı, milisaniye cinsinden
- mapping: kumanda W3C standart gamepad düzenine uyuyorsa “standard”; aksi halde ""
- vibrationActuator: haptik geri bildirim için bir arayüz (desteklendiği yerde)
API, bağlı kumandaları sunmadan önce bir kullanıcı hareketi (tuş basışı) ister. Bu, hareket gereksinimidir: sayfaların kumandanı arka planda parmak izi ile tanımlamasını önleyen bir gizlilik özelliği. JoyCheck, hareket tetiklenene kadar “Başlamak için herhangi bir tuşa bas” gösterir.
JoyCheck neden olayları dinlemek yerine sorgu yapıyor
Gamepad API belirtimde yalnızca sorgu (poll-only) mantığındadır. Dinleyebileceğin bir onbuttonpress olayı yoktur: kodun navigator.getGamepads() sorgular ve mevcut durumun bir anlık görüntüsünü alır. JoyCheck requestAnimationFrame kullanarak sorgular[5]; bu, geri çağırmayı tarayıcının ekran yenileme hızında tetikler (tipik olarak 60 Hz, yüksek yenileme hızlı ekranlarda 240 Hz’e kadar).
Yenileme hızında sorgulamak şu nedenlerle doğru tempodur:
- İşletim sistemi kumanda durumunu kabaca bu tempoda günceller (USB HID 1 kHz’de örnekler; tarayıcı aşağı örnekler)
- İşleme, yenileme hızında gerçekleşir; dolayısıyla fazladan sorgular, görsel farkı olmayan tekrar kareler üretir
- CPU kullanımını en düşük düzeyde tutar; sorgu geri çağırması kare başına tek bir fonksiyon çağrısıdır
Daha hızlı sorgulamak (setInterval ya da setTimeout ile) CPU’yu boşa harcar ve tekrar anlık görüntüler üretir. Daha yavaş sorgulamak (ör. 30 Hz) yüksek yenileme hızlı ekranlarda hızlı tuş basışlarını kaçırır. requestAnimationFrame ekrana uyar, o da gerçekte gördüğün şeye uyar.
JoyCheck neden sıfır veri gönderir ve bunu nasıl doğrularım?
Bunu üç kez söylüyoruz çünkü önemli:
-
JoyCheck hiçbir kumanda verisini asla hiçbir sunucuya iletmez.
-
Gamepad API tamamen senin tarayıcı sürecinde çalışır. Kumanda durumu sayfayı asla terk etmez.
-
Widget’ın kaynağını görüntüle: her API çağrısı, yalnızca DOM düğümlerini güncelleyen bir requestAnimationFrame geri çağırmasına çözümlenir. Kumanda verisi taşıyan hiçbir fetch() çağrısı, XMLHttpRequest ya da WebSocket teması yoktur.
Bunu bir dakikadan kısa sürede kendin doğrulayabilirsin: herhangi bir tarayıcıda JoyCheck aç, DevTools’u aç (F12), Ağ sekmesine tıkla, günlüğü temizle ve widget’ı 30 saniye kullan. Ağ sekmesi kumanda durumu istekleri için boş kalır. Tam açıklama gizlilik sayfasında.
Neden masaüstü uygulaması yerine tarayıcı test aracı?
Üç neden:
Kurulum sürtünmesi yok. Gamepad API artık, kullanıcılardan bir ikili dosya indirip çalıştırmalarını istemenin gereksiz bir yük olacağı kadar güvenilir. Bir sayfa yüklemesi bir kurulum aracından hızlıdır; bir tarayıcı, yalnızca Windows’a özgü .exe dağıtımından daha evrenseldir.
Platformlar arası ve ücretsiz. Aynı sayfa Windows, macOS, Linux ve ChromeOS üzerinde platform başına derleme olmadan çalışır. Bir tarayıcı test aracı bir kez yayınlanır.
30 saniyede denetlenebilir. Bir web sayfasının ağ etkinliği ve depolaması, herhangi bir kullanıcı tarafından herhangi bir zamanda tarayıcı DevTools ile incelenebilir. Bir masaüstü uygulamasının ağ etkinliği için tcpdump, Wireshark ya da lsof ve root izinleri gerekir. Denetim yapabilme meselesi önemlidir.
“PC çevre birimleri ve oyun kumandaları üzerinde yıllar süren donanım tanılama çalışmaları boyunca, tarayıcı tabanlı test araçları, bir masaüstü tanılama aracının asla yüzeye çıkaramayacağı arızaların kabaca üçte ikisini yakaladı. Tarayıcı, kumandanın fiziksel olarak bildirdiğini okur; bu, kurulum tabanlı herhangi bir sürücünün açığa çıkardığından farklı bir gerçeklik katmanıdır.”
Taimoor Bamazai, kurucu, Elites Algorithm Limited
JoyCheck’in bilinen sınırları nelerdir?
Dürüst bir liste, JoyCheck’in yapmadığı şeyler:
-
Ham HID erişimi yok. Ham USB HID tanımlayıcısını okumak, daha az tutarlı tarayıcı desteğine sahip ayrı bir W3C belirtimi olan WebHID gerektirir (bugün yalnızca Chrome ve Edge).
-
Gamepad API öncesi kumandalar. XInput’tan önceki, yalnızca DirectInput kumandaları tarayıcıda görünmez. Bunlar WebHID ve bir çeviri katmanı gerektirir.
-
Titreşim desteği tarayıcıya göre değişir. Firefox, vibrationActuator konusunda Chrome’un gerisinde kalır; Safari sınırlı destek sunar. JoyCheck bu sınırı düzgün biçimde bildirir.
-
Xbox kumandalarında tetik basıncı sürücü katmanına bağlıdır. Bazı Bluetooth eşleştirmeleri ikili tetik bildirir (yalnızca açık/kapalı, analog aralık yok). Kablolu bir USB bağlantısı bunu genellikle düzeltir.
Tarayıcının görebileceğinin ötesindeki platforma özgü tanılama yolları için özel adım adım kılavuz, donanım tarafında müdahale gerektiren arıza örüntülerini kapsar.
Bu aynı tarayıcı tabanlı okuma katmanını kullanan kumandaya özgü tanılama kılavuzları için Switch Pro Controller eşleştirme kılavuzu, DualSense kalibrasyon adım adım kılavuzu ve PS4 kumandası kalibrasyon kılavuzu, Gamepad API’nin tek başına çözemeyeceği platforma özgü eşleştirme tuhaflıklarını kapsar.
Kaynaklar ve referanslar
-
W3C Gamepad API belirtimi. Bağlı gamepad’ler için her modern tarayıcının uyguladığı normalleştirilmiş analog çubuk değer aralıklarını (-1.0 ile +1.0), sorgu arayüzünü ve kullanıcı hareketi gereksinimini tanımlayan W3C standardı.
-
MDN Web Docs: Gamepad API. Mozilla’nın tarayıcı yerlisi gamepad okumayı, animasyon karesi sorgu temposunu ve titreşim desteği için kullanılan Haptic Actuator[3] uzantısını kapsayan geliştirici referansı.
-
Gamepad Haptic Actuator API referansı (MDN). Haptic Actuator uzantısına, DualSense, Xbox Series X|S ve Switch Pro kumandaları genelinde tarayıcı sağlayıcısı desteğine ve kısmi Safari kapsamına ilişkin MDN referansı.
-
caniuse.com Gamepad API destek matrisi. Chrome, Edge, Firefox, Brave, Vivaldi, Safari ve iOS Safari genelinde güncel tarayıcı desteği dökümü; haptiğin kullanılabilir hale geldiği sürüm dahil.
-
Gamepad API için web.dev kılavuzu. Bağlantı olaylarını, sorgu örüntülerini ve JoyCheck’in dahili olarak kullandığı önerilen requestAnimationFrame entegrasyonunu kapsayan Google web platformu referansı.
JoyCheck örnekleme hızı gözlemleri (2026-05’te ölçüldü)
Tarayıcılar Gamepad API okumasını requestAnimationFrame temposuyla sınırlar. Analizimizde aynı kumandaları özdeş ekran koşullarında ölçtük. Tüm okumalar: taze Chrome 120 oturumu, aksi belirtilmedikçe USB bağlantısı, kayan 5 saniyelik pencere.
| Kumanda | Yerel donanım örneklemesi | JoyCheck ile ölçülen (60 Hz ekran) | Notlar |
|---|---|---|---|
| PS5 DualSense (USB) | 250 Hz | 59, 60 Hz | rAF ile sınırlı |
| PS5 DualSense (Bluetooth) | 250 Hz | 59, 60 Hz | rAF ile sınırlı |
| Xbox Series kumandası (USB) | 125 Hz | 59, 60 Hz | rAF ile sınırlı |
| 8BitDo Pro 2 (Bluetooth) | 125 Hz | 59, 60 Hz | rAF ile sınırlı |
| Switch Pro Controller (Bluetooth) | 200 Hz | 59, 60 Hz | rAF ile sınırlı |
| Logitech G29 (USB) | 100 Hz | 59, 60 Hz | rAF ile sınırlı |
JoyCheck’in tarayıcı içi örnekleyicisiyle ölçülmüştür. 144 Hz ekranlar sınırı orantılı olarak yükseltir; okumalar tarayıcılar arası karşılaştırma için 60 Hz temel çizgisine normalleştirilmiştir.
JoyCheck'in nasıl çalıştığına dair sık sorulan sorular
Gamepad API nedir?
W3C Gamepad API, JavaScript'in bağlı USB ve Bluetooth kumandaları okumasını sağlayan tarayıcı yerlisi bir arayüzdür. Her tuşu 0 ya da 1 basılı durumu olarak, her analog çubuğu -1.0 ile 1.0 arası X/Y koordinatları olarak ve tetikleri 0.0 ile 1.0 arası analog basınç değerleri olarak sunar. Chrome, Edge, Firefox ve Safari 14.1+ sürümlerinde mevcuttur.
JoyCheck kumandamı okumak için izin gerektirir mi?
Sistem düzeyinde hiçbir izin gerekmez, ancak tarayıcı durumu sunmadan önce bir kullanıcı hareketi (kumandadaki herhangi bir tuşa basış) ister. Bu, JoyCheck'in bir kısıtı değil, Gamepad API belirtiminin bir gizlilik ve güç tasarrufu özelliğidir.
JoyCheck kumandamı ne sıklıkla okur?
JoyCheck her animasyon karesinde requestAnimationFrame üzerinden navigator.getGamepads() sorgular. Bu, ekran yenileme hızınla eşleşir: standart bir monitörde 60 Hz, yüksek yenileme hızlı bir ekranda 120 ya da 144 Hz. Donanım daha hızlı örnekleyebilir ama tarayıcı bunu JavaScript'e sunamaz.
Kumandam neden ancak bir tuşa bastıktan sonra görünüyor?
Belirtim gereği Gamepad API, kullanıcı bir giriş yapana kadar bağlı kumandaları gizler. Bu, pasif parmak izi çıkarmayı önler ve arka plan CPU yükünü azaltır. API'yi uyandırmak için herhangi bir tuşa bas; kumanda bir animasyon karesi içinde JoyCheck'e görünür hale gelir.
JoyCheck klavyemi ve faremi okuyabilir mi?
Yalnızca Klavye sekmesi üzerinden: klavye girişi Gamepad API'den değil, standart KeyboardEvent API'sinden geçer. Fare girişi JoyCheck'in kapsamı dışındadır.
Bu, Chromebook'larda çalışır mı?
Evet. ChromeOS, Chrome'da (ve Play Store üzerinden kurulan herhangi bir Chromium tabanlı tarayıcıda) Gamepad API'yi destekler.
Neden tüm kumandalar titreşim bildirmiyor?
Gamepad Haptics uzantısı tarayıcıya ve kumandaya bağlıdır. Chrome/Edge/Firefox bunu çoğu modern ped için (DualSense, Xbox Series X|S, Switch Pro) destekler. Safari desteği kısmidir. Bazı eski kumandalar hiç haptik aktüatör bildirmez.
İLGİLİ OKUMALAR
Devam et
Sık sorulan sorular
JoyCheck, güvenlik, gizlilik, desteklenen kumandalar ve sorun giderme hakkında sık sorulan sorular.
JoyCheck'te gizlilik
Sıfır veri gönderilir. Tarayıcının DevTools'unda beş satırda doğrulanabilir.
Çubuk kayması, 30 saniyede tanısı
Çubuk kayması gerçekte nedir, hangi kumandalar en çok kayar ve bu konuda ne yapılır.
Kumandanı tarayıcıda test et
Kurulum yok, hesap yok. Girişlerin cihazından asla ayrılmaz.