Three.js · Etkileşim · Girdi
Input mapping: cihazlar arası tercüme katmanı
Input mapping, donanımın ürettiği ham olayları (pixel delta, tuş kodu, çoklu dokunuş kimlikleri) sahne davranışlarına (dönme, ilerleme, yakınlaşma, seçim) bağlayan sözleşmedir. İyi bir katman, kullanıcıya «bu yazılım benim alıştığım dili konuşuyor» mesajını taşır — kötüsü ise her platformda farklı bir kod yolu kopyalar.
Bu sayfa neyi eşleyeceğinizi ve neden masaüstü ile mobilin farklı politika gerektirdiğini özetler; genel kontrol hattı için Kontrol döngüsü, girdi cinsleri için girdi türleri sayfalarına geri dönebilirsiniz.
Bölümler: masaüstü, dokunmatik, platform farkları, birleşik girdi.
Masaüstü: fare ve klavye eşlemesi
Masaüstü kanalı yüksek çözünürlük ve eşzamanlı çoklu kanal sunar; mapping, bu kanalları tek bir «komut akışına» indirger. Olay sırası (ör. önce tuş durumu okunup sonra fare deltasının işlenmesi) beklenmedik sıçramalara yol açabilir; aynı kare içinde tek bir «giriş anlığı görüntüsü» üretip tüm kontrollerin bunu okuması daha stabildir.
- Mouse move (delta): İmlecin kare başına Δx / Δy değişimi, bakış güncellemesine (çoğu kurulumda yaw / pitch bileşenleri) bağlanır. Mutlak konumdan ziyade göreceli okuma, FPS tarzı sürekli dönüş için şarttır. Çözünürlük ve cihaz piksel oranı (device pixel ratio) bazı ortamlarda delta ile birlikte değişir; kullanıcı ayarı olarak dikey/yatay ayrı hassasiyet ve «ters Y» seçenekleri eklemek, özellikle tasarım inceleme modlarında talep görür.
- Tekerlek (wheel): Dikey kaydırma olayı, genelde kameranın hedefe uzaklığı (dolly / yarıçap) veya ortografik projeksiyon ölçeğine eşlenir; tarayıcıların varsayılan sayfa kaydırmasını engellemek için olayın preventDefault politikasını bilinçli seçin. deltaMode satır/piksel farkını tolere etmeyen kodlar mobil masa–fare veya hassas tekerlekte sıçrama yapar; önce fiziksel birime normalize etmek uzun vadede daha az sürpriz üretir. Çift yönlü zoom için ekseni işaretleyip yakınlaştırma üst sınırını uygulama politikasıyla kelepçelemek önemlidir.
- Klavye (WASD / oklar): İkili basılı/bırakılmış durumları, dünya veya kamera yerel uzayında bir hız vektörü üreticisine bağlarsınız; çapraz basışta normalize etmek beklenen kalite çizgisidir. Tuş tekrarı (repeat) ile ilk olayın ayrışması bazı tarayıcılarda davranış farkı çıkarır; uzun basılı tutmada sürekli itkiyi tuş durumu özetinden üretmek daha güvenilirdir. Erişilebilirlik için okların kalması ve yeniden bağlanabilir düzen haritası üretim standardına yaklaşır.
- Düzenleyiciler (Shift / Ctrl): Çoğu projede «ince ayar» veya «sprint» çarpanı olarak kullanılır — aynı tuş setiyle iki hız rejimi sunmak eğitim maliyetini düşürür. Çift düzenleyici kombinasyonlarının çarpımının bir tavanla kesildiğinden emin olun; aksi halde kullanıcı farkında olmadan kontrolü aşında hızlanmış hisseder.
- Fare düğmeleri: Sol / orta / sağ tuşları ayrı aksiyonlara bağlamak yaygındır — orbit için döndürme–pan–zoom üçlemesi tipiktir. Aynı düğmenin hem tuşa basılı sürmeyi hem tek tık seçimi üstlendiği durumlarda, kısa tıklama ile uzun sürüklemeyi zaman eşiğiyle ayırmak yarış durumlarını azaltır.
Mobil: dokunuş ve jest
Dokunmatikte «tek nokta tıklama» yerine sürekli temas yüzeyi vardır; jestler parmak sayısı ve hareket tarihçesi ile ayrışır. Sayfa düzeyinde touch-action ve pasif dinleyici tercihleri, varsayılan tarayıcı kaydırmasıyla yarışmayı belirler; tam ekran canvas senaryolarında bu seçimi sahneye özel netleştirmek şarttır.
- Tek parmak (sürükleme): Basılı tutarak sürükleme, birçok sahne kurulumunda masaüstündeki «sol tuşla döndür» ile aynı mantıksal aksiyona bağlanır — fakat parmak genişliği nedeniyle mikro düzeltme daha zordur. Kısa hareketler bazen «titreme» olarak görülür; çok küçük hareketleri bilerek yutan ölü bölge, özellikle seçim sonrası düzenlemede faydalıdır.
- İki parmak pinch: Başlangıç ve güncel parmak mesafesi oranı veya farkı zoom için kullanılır; ani sıçramayı önlemek için logaritmik ölçek veya üst sınırlı kazanç tercih edilir. Pinch sırasında merkez noktasını sahneye sabitleyen (odaklı zoom) ile sabit merkezli yakınlaştırma hissiyatı farklıdır — kullanıcıya hangisinin aktif olduğunu küçük bir görsel ipucuyla bildirmek kafa karışıklığını düşürür.
- İki parmak paralel kaydırma: Birlikte öteleme jesti çoğu zaman pan veya düzlem içi kaydırmaya eşlenir — tek parmak döndürme ile aynı anda çakışmaması için jest tanıma dilimi net olmalıdır. Sürtünme ile yan kenardan çıkan parmak jestini yanlış okuma (ghost gesture) yaşanırsa geçiş tamponunda küçük bir bekleme veya parmak kimlik takibi eklemek stabiliteyi artırır.
- Tap ve süre: Kısa temas seçimi tetikler; uzun basım (long-press) bağlam menüsü veya araç değiştirme için kullanılabilir — süre eşikleri masaüstü çift tıklama süresinden bağımsız ayarlanmalıdır.
Neden masaüstü ile mobil ayrı politika ister?
Tek kod tabanı hedefleniyorsa farklar «kusur» değil tasarım girdisidir: aynı aksiyon adına iki fiziksel yol olduğunu kabul edip politikayı iki katmanda toplayın.
- Hassasiyet ve alan: Fare tek piksel seçebilir; parmak ekranda yüzey kaplar. Picking için toleransı genişletmek, hedef bölgeleri büyütmek veya özet geometri ile ön eleme yapmak gerekir — ayrıntı için Mesh picking · hassasiyet. Küçük dokunmatik hedefler için görünmez hit bölgeleri («genişletilmiş tıklanabilir alan») erişilebilirlik kılavuzlarıyla uyumludur; masaüstünde ise aşırı büyük görünmez alan yanlış seçimi tetikleyebilir — platform bazlı ölçek politikası düşünün.
- Süreklilik: Tuş basılı kaldığı sürece itki üretmek kolaydır; dokunuşta ise parmak ekran dışına çıkabilir veya touchcancel ile akış kesilir. Bildirim paneli veya sistem jestleri (pull-to-refresh) sahneyi iptal ettiğinde kameranın «havada asılı» kalmaması için iptalde güvenli durdurma ve küçük bir süzülme ile sıfırlama sıklıkla iyidir — mobilde yumuşatma ve kısa süreli süzülme çoğu zaman zorunlu konfor katmanıdır (bkz. Lerp & easing).
- Pointer lock: Birinci şahıs için masaüstünde imleç hapsedilir; mobilde imleç soyutlaması yoktur — hareket doğrudan dokunuş deltasının ve jestin birleşiminden türetilir. Aynı FPS kodunu taşımak için ayrı bir yorumlayıcı yazmak gerekir (Pointer lock). Hareket odaklı sanal joystick bile bileşik ekseni fiziksel fareden farklı ürettiği için, masaüstü «saf delta» kodunun doğrudan kopyası nadiren iş görür.
- Görünüm ve tarayıcı chrome: Adres çubuğu kayması veya döşeme düzeni değişimi görünür sahne boyutunu günceller; yeniden boyutlanmayla birlikte dokunuş koordinatlarının yeniden örneklenmesi gerektiğini unutmayın.
Birleşik girdi stratejisi
Her cihaz için ayrı oyun mantığı yazmak yerine, çoğu üretim hattı iki katmanlı soyutlama kurar: önce fiziksel olayı anlamlı niceliğe çevir, sonra o niceliği oyuna özgü komuta bağla. Ortadaki katman bazen «donanım sürücüsü», soyutlamanın ikinci katmanı ise «oyun bağlamı» olarak düşünülür — böylece QA, ekseni yanlış yorumladığında hangi dosyayı arayacağını bilir.
- Normalize değerler: Fare pikselleri ile parmak yüzdesi aynı mantıksal eksende birleştirilebilir; örneğin yatay dönüş komutu −1…1 aralığında «istek vektörü» olarak beslenir. Böylece sahne kodu donanım birimini bilmez. Eksen bazında ölçek (fare için daha yüksek çözünürlük hissiyatı, parmak için daha düşük) profilden seçilebilir hâle getirilebilir. Kare zamanından bağımsızlık için bu katmandan çıkan vektörü mümkünse zaman ile çarpın — sabit kare varsayımı mobil güç tasarrufu modlarında bozulur.
- Aksiyon eşlemesi (action mapping): «Sol tık» veya «tek parmak sürükleme» doğrudan geometriye bağlanmaz; ikisi de «yörünge döndür» veya «bakış kaydır» gibi isimlendirilmiş aksiyonlara bağlanır. Aynı aksiyon klavye kısayoluyla da tetiklenebilir. Çift bağlama (chords) ve makroları da bu düzeyde çözümlemek, sahneye sızan düzenleyici özel durumlarını azaltır.
- Durum makinesi: Menü açıkken hareket aksiyonlarını kesmek, düzenleme modunda gezinmeyi kilitlemek gibi kurallar tek yerde toplanır — böylece platform dallanması tek dosyada kalır. Öncelik sırası (ör. metin girişi aktorken sahneyi dondur) yazılı olmadığında yarış koşulları çıkar; kısa bir öncelik tablosu belgesi çok zaman kazandırır.
- Yeniden bağlama ve profiller: Kullanıcı tuşlarını değiştirdiğinde yalnızca aksiyon → fiziksel eşleme tablosu güncellenir; sahne mantığı dokunulmaz. Çakışan bağların uyarıyla yakalanması, özellikle düzenleyici tuşların sürekli etkin olduğu araçlarda destek maliyetini düşürür.
Holodepth teknik notu
Eşlem tablosunu veri olarak tutun (ör. JSON veya hafif yapılandırma); böylece QA farklı donanımlarda aynı aksiyon kümesini yeniden bağlayabilir. Oyun çubuğu desteği gelecekte eklenecekse eksen ölü bölgelerini ve tetik basım sürelerini de bu katmandaki normalize adımına koymak, üçüncü bir kod yolu açmaz.