การรองรับการป้อนข้อมูล

แม้ว่าอุปกรณ์ 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 เพื่อรองรับ

ปุ่มจะเชื่อมโยงกับค่าทั่วไปตามการเชื่อมโยงทั่วไป อย่างไรก็ตาม ผู้ผลิตเกมคอนโทรลเลอร์บางรายไม่ได้ใช้รูปแบบการแมปเดียวกัน การอนุญาตให้ผู้ใช้เลือกจากการแมปคอนโทรลเลอร์ยอดนิยมต่างๆ จะช่วยให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ดีขึ้นมาก