แม้ว่าอุปกรณ์ ChromeOS หลายรุ่นจะมีหน้าจอสัมผัส แต่สำหรับเกมแล้ว ประสบการณ์การโต้ตอบที่ดีที่สุดบนอุปกรณ์หน้าจอขนาดใหญ่เหล่านี้มักจะมาจากการใช้เมาส์ แป้นพิมพ์ และเกมแพด โลกแห่งเกมบนอุปกรณ์เคลื่อนที่มักจะเน้นการสัมผัส และต้องพิจารณาถึงวิธีมอบประสบการณ์ที่ดีที่สุดแก่ผู้ใช้ที่ไม่ได้ใช้การสัมผัส
เริ่มต้นด้วยการดูแนวทางปฏิบัติแนะนำสำหรับการเพิ่มการรองรับแป้นพิมพ์ เมาส์ และอุปกรณ์ควบคุมเกม คุณควรให้ความสนใจเป็นพิเศษในกรณีที่ผู้ใช้กดปุ่มค้างไว้หรืออาจกดหลายปุ่มพร้อมกัน
การดำเนินการแบบสัมผัสใช้ได้กับ Chromebook ที่มีหน้าจอสัมผัส แต่ก็ควรมีการควบคุมทางกายภาพที่ออกแบบมาอย่างดีเพื่อมอบประสบการณ์การใช้งานที่ยอดเยี่ยมด้วย ตัวอย่างเช่น การป้อนข้อมูลด้วยเมาส์เหมาะสำหรับการปรับมุมมองหรือการเล็ง แต่ไม่ควรต้องใช้ในการดำเนินการ หากเกมบนอุปกรณ์เคลื่อนที่มีเมนูบนหน้าจอที่อนุญาตให้ผู้ใช้ใช้ไฟฉาย ดาบ หรือโล่โดยการกดปุ่มด้วยนิ้วหัวแม่มือ การกำหนดให้ผู้ใช้คลิกปุ่มเหล่านี้ด้วยเมาส์จะทำให้เกิดประสบการณ์ที่ไม่ดี แต่ควรกำหนดแป้นบนแป้นพิมพ์ให้ทริกเกอร์การดำเนินการแต่ละอย่างโดยการลบล้าง onKeyUp หรือ onKeyDown ดูรายละเอียดและโค้ดได้ที่หน้าความเข้ากันได้ของอินพุต
การจับภาพเมาส์
เกมมุมมองบุคคลที่หนึ่งจะดูดีที่สุดบนเดสก์ท็อปเมื่อใช้การจับเมาส์ ซึ่งจะซ่อนเคอร์เซอร์เมาส์และอนุญาตให้ผู้ใช้ย้ายมุมมอง เล็ง บังคับเลี้ยว ฯลฯ โดยใช้เมาส์ ด้านล่างนี้คือการสาธิตการจับภาพเมาส์พื้นฐานที่บันทึกตำแหน่งเคอร์เซอร์และสถานะปุ่มหลังจากที่ผู้ใช้คลิกมุมมองข้อความชื่อ text_clickme ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับการจับพอยน์เตอร์ของ Android
class MainActivity : AppCompatActivity() { var mouse_x: Float = 0f var mouse_y: Float = 0f var mouse_left_pressed = false var mouse_center_pressed = false var mouse_right_pressed = false var mouse_scrolling = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) text_clickme.setOnClickListener { text_clickme.requestPointerCapture() } text_clickme.setOnCapturedPointerListener { view, motionEvent -> // Get the coordinates required by your app mouse_x = motionEvent.x mouse_y = motionEvent.y when (motionEvent.action) { ACTION_DOWN -> { when (motionEvent.buttonState) { BUTTON_PRIMARY -> mouse_left_pressed = true BUTTON_SECONDARY -> mouse_right_pressed = true BUTTON_TERTIARY -> mouse_center_pressed = true } mouse_scrolling = false } ACTION_CANCEL, ACTION_UP -> { when (motionEvent.actionButton) { BUTTON_PRIMARY -> mouse_left_pressed = false BUTTON_SECONDARY -> mouse_right_pressed = false BUTTON_TERTIARY -> mouse_center_pressed = false 0 -> { mouse_left_pressed = false mouse_right_pressed = false mouse_center_pressed = false } } mouse_scrolling = false } ACTION_SCROLL -> { mouse_scrolling = true } else -> { mouse_scrolling = false } } // Indicate event was consumed true } } // Release pointer capture when escape pressed override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean { if (keyCode == KEYCODE_ESCAPE) { text_clickme.releasePointerCapture() return true; } return super.onKeyUp(keyCode, event) } }
แชท
ฟีเจอร์แชทอาจเป็นองค์ประกอบสำคัญของเกมแบบผู้เล่นหลายคน ลองใช้เวลาสักครู่คิดถึงวิธีที่ผู้ใช้จะโต้ตอบกับฟีเจอร์แชทของเกมขณะเล่น โดยเฉพาะอย่างยิ่ง หากเด็กๆ เล่นเกมด้วยแป้นพิมพ์ ก็ไม่ควรต้องใช้เมาส์หรือหน้าจอสัมผัสเพื่อเข้าถึงแชทหรือส่งข้อความ
รูปแบบหนึ่งอาจเป็นการใช้ปุ่มบนแป้นพิมพ์เพื่อโฟกัสที่ช่องแชท และจัดการปุ่ม Enter เพื่อส่งข้อความ
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { return when(keyCode) { KeyEvent.KEYCODE_C -> { edittext_chatbox.requestFocus() true } KeyEvent.KEYCODE_ENTER -> { submitChatMessage() true } else -> super.onKeyUp(keyCode, event) } }
ดูเอกสารประกอบเกี่ยวกับคีย์บอร์ดในหน้าความเข้ากันได้ของอินพุต Android
รองรับสไตลัส
แอปวาดภาพและเกมที่ใช้การปัดจะใช้ประโยชน์จากการป้อนข้อมูลด้วยสไตลัสในอุปกรณ์ ChromeOS ได้ ดูรายละเอียดเพิ่มเติมได้ที่หน้าการป้อนข้อมูลด้วยสไตลัส
เกมคอนโทรลเลอร์
Chromebook รองรับตัวควบคุมเกมสูงสุด 4 ตัว นักพัฒนาแอปควรใช้ Game Controller API มาตรฐานของ Android เพื่อรองรับ
ปุ่มจะเชื่อมโยงกับค่าทั่วไปตามการเชื่อมโยงทั่วไป อย่างไรก็ตาม ผู้ผลิตเกมคอนโทรลเลอร์บางรายไม่ได้ใช้รูปแบบการแมปเดียวกัน การอนุญาตให้ผู้ใช้เลือกจากการแมปคอนโทรลเลอร์ยอดนิยมต่างๆ จะช่วยให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ดีขึ้นมาก