ฉันจะจัดการรูปแบบแป้นพิมพ์ที่แตกต่างได้อย่างไร


10

สมมติว่าฉันมีเกมที่ใช้ตัวควบคุม WASD ในเค้าโครง QWERTY พยายามที่จะใช้การควบคุมเหล่านี้ในพูดเค้าโครง Dvorak ไม่เหมาะ (เทียบเท่า<A:Hกับ QWERTY) เห็นได้ชัดว่าฉันต้องการใช้ปุ่มทางกายภาพเหมือนกับที่ QWERTY ใช้ ( ,aoeบน DVORAK)

ฉันคิดวิธีแก้ปัญหาที่เป็นไปได้สองสามข้อ:

  • บังคับให้ผู้ใช้ใช้ QWERTY
    • เห็นได้ชัดว่าไม่เหมาะโดยเฉพาะอย่างยิ่งสำหรับผู้ใช้ต่างประเทศ
  • เปลี่ยนทางลัดตามเค้าโครงแป้นพิมพ์ (WASD ->, aoe)
    • บังคับให้ฉันทำแผนผังเลย์เอาต์สำหรับแต่ละเลย์เอาต์ที่รองรับ (อัตโนมัติ)
    • ง่ายที่สุดสำหรับผู้ใช้หากมีทางลัดมากกว่า WASD
  • บังคับให้ผู้ใช้กำหนดทางลัดด้วยตนเอง
    • ยืดหยุ่นมากขึ้น
    • น่ารำคาญหากมีทางลัดมากมาย
    • สามารถใช้ร่วมกับตัวเลือกที่สอง
  • ใช้รหัสฮาร์ดแวร์
    • สอดคล้องกันทั่วคีย์บอร์ด?

จัดการกับสิ่งนี้ได้อย่างไร

คำตอบ:


9

ฟังรหัสสแกน วิธีการทำสิ่งนี้ขึ้นอยู่กับระบบปฏิบัติการของคุณซึ่งคุณไม่ได้ทำรายการไว้ บน Windows, คุณจะได้รับ scancode สำหรับรับรหัสคีย์เสมือนจาก WM_KEYDOWN และเพื่อนโดยใช้MapVirtualKey รหัสสแกนจะขึ้นอยู่กับคีย์ทางกายภาพและไม่ได้รับผลกระทบจากโครงร่าง

มีการอ่านอย่างรวดเร็วของhttp://www.altdevblogaday.com/2011/10/02/i-never-managed-to-go-left-on-first-try/

ใช่ดังที่ Nicol Bolas พูดคุณสามารถและควรอนุญาตให้ผู้ใช้แก้ไขได้ แต่การทำให้มันใช้งานได้ทันทีไม่ใช่เรื่องยากและผู้ใช้ของคุณจะประทับใจ

โปรดทราบว่าคุณ (อาจ) จัดการกับการป้อนอักขระผิดเช่นนักพัฒนาเกมส่วนใหญ่ ตรวจสอบให้แน่ใจว่าสำหรับข้อความคุณใช้WM_CHARเสมอ (หรือเทียบเท่ากับระบบปฏิบัติการอื่น) แทนการใช้ WM_KEYDOWN สำหรับการป้อนข้อความ มันผิดอย่างสมบูรณ์ที่จะสมมติว่าเมื่อกดปุ่ม 'a' ที่คุณควรป้อน 'a' ไปยังตัวควบคุมการป้อนข้อความเนื่องจากการใช้ Dead Keys ในบางเลย์เอาต์ นอกจากนี้คุณยังสามารถรองรับIME (หรือเทียบเท่า OS) สำหรับตลาดเอเชียตะวันออกที่มีอักขระเกินกว่าที่ควรจะพอดีกับแป้นพิมพ์และต้องใช้ UI พิเศษในการพิมพ์ การจัดการ IME ในเกมเป็นความเจ็บปวด (การจัดการกับมันทั้งหมดเป็นความเจ็บปวด) แต่ก็คุ้มค่าที่ฉันคิดว่าเพื่อเพิ่มความน่าสนใจให้กับผลิตภัณฑ์ของคุณไปสู่ตลาดที่ใหญ่กว่าและใหญ่กว่ามาก อีกครั้ง WM_KEYDOWN จะไม่ถูกใช้เป็นข้อความตลอดไป


คำปรึกษาที่ดี. ฉันไม่ได้แสดงระบบปฏิบัติการเพราะฉันกำลังมองหาแนวทาง / ความคาดหวังทั่วไป (ฉันสามารถจัดการรายละเอียดการใช้งานได้)
beatgammit

6

คุณควรเสมอให้ผู้เล่นสามารถในการเปลี่ยนการกำหนดคีย์ของพวกเขา นั่นคือวิธีที่ "ปกติจัดการ": ให้ผู้เล่นเปลี่ยนพวกเขา ผู้เล่นบางคนจะตั้งค่าคีย์บอร์ดเป็น QWERTY เมื่อเล่นเกมเพราะนั่นคือสิ่งที่เกมส่วนใหญ่คาดหวัง บางคนจะปล่อยให้พวกเขาตั้งค่าเป็นแป้นพิมพ์ปัจจุบันของพวกเขาและพึ่งพาความสามารถในการเปลี่ยนคีย์


1
แล้วภาษานั้นจะเปลี่ยนไปเมื่อไหร่? ตัวอย่างเช่นฝรั่งเศสคาดหวังว่าจะเปลี่ยน WASD -> ZQSD หากพวกเขาต้องการรักษาเค้าโครง AZERTY แม้ว่าเกมนั้นจะเป็นภาษาฝรั่งเศสหรือไม่
beatgammit

1
@tjameson: คุณอ่านคำตอบของฉัน? ปล่อยให้พวกเขาได้รับมอบหมาย redefine สำคัญของพวกเขา จากนั้นจะไม่มีปัญหา
Nicol Bolas

1
ใช่ฉันไม่อ่านคำตอบของคุณและฉันอาจจะไปกับคำแนะนำของคุณ ฉันแค่ต้องการทำให้แน่ใจว่าไม่มีความคาดหวังเมื่อทำการจัดส่งไปยังผู้ใช้ในสถานที่ต่าง ๆ
beatgammit

3

ในกรณีที่คุณไม่สามารถฟังรหัสสแกน (เช่นเมื่อพัฒนาเกมแฟลช) คุณสามารถสร้างการเชื่อมโยงคีย์ซึ่งใช้ได้กับเลย์เอาต์มากที่สุด รูปแบบแป้นพิมพ์ส่วนใหญ่คล้ายกันมากโดยมีข้อยกเว้นเล็กน้อย

รูปแบบแป้นพิมพ์ตามมาตรฐาน ISO 9995 (เป็นส่วนใหญ่) จะถูกจัดเรียงดังนี้:

รูปแบบแป้นพิมพ์หลังจาก ISO

โดยทั่วไปแล้วปุ่มดำมีความปลอดภัยในการใช้


สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการจัดวางคีย์การ์ดดูQWERTY , QWERTZ , AZERTYและQZERTY
Chuck Walbourn

3

เกมราคาประหยัดขนาดใหญ่ส่วนใหญ่ (เกมที่มีตัวแทนจำหน่ายต่างประเทศ) จะใช้งานได้นอกกรอบโดยใช้ ZQSD แทน WASD สำหรับรูปแบบที่แปลกใหม่ เกมที่เหมาะสมจะแนะนำเลย์เอาต์ในระดับแรกผู้อื่นจะให้ผู้เล่นค้นพบมันผ่านหน้าจอปรับแต่ง กลยุทธ์การใช้งานสามารถตรวจพบได้โดยขอให้ระบบปฏิบัติการเปลี่ยนรูปแบบ ทั้งเกมใช้ scancodes (ตำแหน่ง) ภายในและแมปไปยังรหัสคีย์ (สัญลักษณ์) เมื่อแสดงกล่องโต้ตอบและการแจ้งเตือนการกำหนดค่า หรือจะใช้คีย์โค้ดภายในและตรวจจับเลย์เอาท์เมื่อเริ่มต้นหรือเปิดตัวครั้งแรก

กลยุทธ์แรก (scancodes ภายใน) มีความแข็งแกร่งมากขึ้น แต่ต้องการการดูแลเล็กน้อยเพื่อป้องกันไม่ให้สิ่งที่เป็นนามธรรมรั่วไหลผ่าน อย่าลืมทำการแมป scancodes ใหม่กับรหัสเมื่อแสดงคีย์ให้ผู้ใช้ คุณจะยังต้องดูรหัสในขณะป้อนข้อความ (ให้ผู้เล่นพิมพ์ชื่อของพวกเขา) หากคุณต้องการจัดการกับข้อความมากกว่านั้นให้ดูที่การใช้การรองรับการป้อนข้อความของแพลตฟอร์มซึ่งอยู่นอกขอบเขตของเอนจิ้นเกม

เมื่อทำการย้ายเกมที่ไม่เคยใช้ scancodes (ซึ่งไม่ใช่ในกรณีที่มีเอ็นจิ้นที่เหมาะสมเนื่องจาก scancodes นั้นอยู่ใกล้กับฮาร์ดแวร์และเร็วกว่า) กลยุทธ์อื่นอาจใช้งานได้จริง คุณสามารถจับคู่ scancodes กับรหัสคีย์ได้โดยใช้ฟังก์ชั่นSDL2 SDL_GetKeyFromScancodeและSDL_GetScancodeFromKeyหรือเทียบเท่าเฉพาะแพลตฟอร์ม หากคุณใช้วนเหตุการณ์ SDL2 ฟังก์ชันเหล่านั้นจะยังคงถูกต้องตลอดการสลับเค้าโครง หลีกเลี่ยงฟังก์ชั่นเช่น GetKeyboardLayout () บน Windows; ไม่มีการรับประกันว่าคุณจะสามารถค้นหาเค้าโครงในรายการที่รู้จักได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.