Farklı klavye düzenlerini nasıl işleyebilirim?


10

Diyelim ki QWERTY mizanpajında ​​WASD kontrollerini kullanan bir oyunum var. Dvorak mizanpajında ​​bu kontrolleri kullanmaya çalışmak ideal değildir ( <A:HQWERTY ile eşdeğer ). Açıkçası ,aoeQWERTY'nin ( DVORAK'ta) kullanacağı fiziksel anahtarları kullanmak istiyorum .

Birkaç olası çözüm buldum:

  • Kullanıcıyı QWERTY kullanmaya zorla
    • Açıkçası ideal değil, özellikle uluslararası kullanıcılar için
  • Kısayolları klavye düzenine göre değiştirme (WASD ->, aoe)
    • beni desteklenen her düzen için düzen eşlemeleri yapmaya zorlar (otomatikleştirilebilir)
    • sadece WASD'den daha fazla kısayol varsa kullanıcı için en kolay
  • Kullanıcıyı kısayolları kendileri tanımlamaya zorla
    • Daha esnek
    • Çok sayıda kısayol varsa sinir bozucu
    • İkinci seçenekle birlikte kullanılabilir
  • Donanım anahtar kodlarını kullanma
    • klavyelerde tutarlı mı?

Bu tür şeyler genellikle nasıl ele alınır?

Yanıtlar:


9

Tarama kodlarını dinleyin. Bunun nasıl yapıldığı, listelemediğiniz işletim sisteminize bağlıdır. Windows'ta, MapVirtualKey kullanarak WM_KEYDOWN ve arkadaşlarından belirli bir sanal anahtar kodunun tarama kodunu alabilirsiniz . Tarama kodları fiziksel anahtara dayanır ve mizanpajdan etkilenmez.

Http://www.altdevblogaday.com/2011/10/02/i-never-managed-to-go-left-on-first-try/ adresini hızlı bir şekilde okuyun .

Evet, Nicol Bolas'ın dediği gibi, kullanıcıların etrafta çalışmasına izin verebilir ve etmelisiniz. Ancak, kutunun dışında çalışmasını sağlamak zor değildir ve kullanıcılarınız bunu takdir edecektir.

Oyun geliştiricilerinin büyük çoğunluğu gibi (muhtemelen) karakter girişini yanlış kullandığınızı unutmayın. Metin için, metin girişi için WM_KEYDOWN yerine her zaman WM_CHAR (veya diğer işletim sistemlerinde eşdeğerini) kullandığınızdan emin olun . 'A' tuşuna basıldığında, bazı mizanpajlarda Ölü Tuşların kullanılması nedeniyle bir metin giriş kontrolüne bir 'a' girmeniz gerektiğini varsaymak tamamen yanlıştır. Ayrıca , klavyeye makul şekilde sığabileceğinden çok daha fazla karaktere sahip olan ve yazmak için özel kullanıcı arayüzüne ihtiyaç duyan Doğu Asya pazarları için IME'yi (veya OS eşdeğerini) destekleyebilirsiniz . IME'yi bir oyunda ele almak bir acıdır (onu ele almak bir acıdır), ancak ürününüzün cazibesini çok daha büyük bir pazar kümesine yükseltmek için bence buna değer. Yine, WM_KEYDOWN asla metin için kullanılmaz.


İyi tavsiye. İşletim sistemini listelemedim çünkü genel yönergeler / beklentiler arıyordum (uygulama ayrıntılarını işleyebilirim).
beatgammit

6

Sen gerektiğini hep oyuncuya kendi anahtar atamalarını değiştirmek için yetenek kazandırır. Bu şekilde "genellikle ele alınır": oyuncu onları değiştirsin. Bazı oyuncular oyun oynarken klavyelerini QWERTY olarak ayarlayacaktır, çünkü çoğu oyun beklediği gibi. Bazıları onları geçerli klavyelerine ayarlanmış ve tuşları değiştirme yeteneğine güvenecektir.


1
Dil değiştirildiğinde ne olacak? Örneğin, Fransızca, oyun Fransızca olsa bile, AZERTY düzenini korumak istiyorsa WASD -> ZQSD'yi değiştirmeyi bekliyor mu?
beatgammit

1
@tjameson: Cevabımı okudun mu? Anahtar atamalarını yeniden tanımlamalarına izin verin . O zaman sorun olmayacak.
Nicol Bolas

1
Evet, yaptım cevap okumak ve ben muhtemelen tavsiyesi ile gidersiniz. Farklı bölgelerdeki kullanıcılara gönderim yaparken bir beklenti olmadığından emin olmak istedim.
beatgammit

3

Tarama kodlarını dinleyemiyorsanız (örneğin bir flash oyun geliştirirken olduğu gibi) mümkün olduğunca çok düzen için çalışan bir anahtar ciltleme yapabilirsiniz. Klavye düzenlerinin çoğu, birkaç istisna dışında çok benzer.

ISO 9995'i (en çok) izleyen klavye düzenleri şu şekilde düzenlenir:

ISO'dan sonra klavye düzeni

Temelde siyah tuşların kullanımı güvenlidir.


Keyoard düzenleri hakkında daha fazla bilgi için bkz. QWERTY , QWERTZ , AZERTY ve QZERTY
Chuck Walbourn

3

Büyük bütçeli oyunların çoğu (uluslararası distribütörlü olanlar), azerty düzenleri için WASD yerine ZQSD'yi kullanarak kutudan çıkar. İyi bir oyun da düzeni ilk düzeyde tanıtacak, diğerleri oyuncunun kişiselleştirme ekranı aracılığıyla keşfetmesine izin verecek. Uygulama stratejisi, işletim sisteminden düzenleri değiştirmesini isteyerek tespit edilebilir. Oyun dahili olarak tarama kodları (konumlar) kullanır ve yapılandırma iletişim kutularını ve komut istemlerini gösterirken bunları kod kodlarıyla (semboller) eşler; veya dahili olarak anahtar kodları kullanır ve düzeni başlangıçta veya ilk açılışta algılar.

İlk strateji (dahili olarak tarama kodları) daha sağlamdır, ancak soyutlamanın sızmasını önlemek için biraz dikkat gerektirir. Anahtarları kullanıcıya sunarken (eğitimlerde, bilgi istemlerinde ve özelleştirme iletişim kutularında) tarama kodlarını yeniden kodlamayı unutmayın. Metin girişi alırken (örneğin bir oynatıcının adını yazmasına izin verirken) anahtar kodlarına bakmanız gerekecektir. Bundan daha fazla metin kullanmanız gerekiyorsa, platformun oyun motorunun dışında kalan metin giriş desteğini (ölü tuşları, büyük harf kilidini, kopya yapıştırma, gelişmiş giriş yöntemlerini ele alır…) kullanmaya bakın.

Hiçbir zaman tarama kodları kullanmayan bir oyunu taşırken (iyi bir motorda durum böyle değildir, çünkü tarama kodları donanıma daha yakın ve daha hızlıdır), diğer strateji daha pratik olabilir. SDL2GetKeyFromScancode ve SDL_GetScancodeFromKey işlevlerini veya platforma özgü eşdeğerlerini kullanarak tarama kodlarını anahtar kodlarla eşleyebilirsiniz . SDL2 olay döngüsünü de kullanırsanız, bu işlevler düzen anahtarlarında doğru kalır. Windows'ta GetKeyboardLayout () gibi işlevlerden kaçının; düzeni bilinen bir listede bulabileceğinizin garantisi yoktur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.