輸入支援

雖然許多 ChromeOS 裝置都有觸控螢幕,但使用滑鼠、鍵盤和遊戲手把,通常能在大螢幕裝置上獲得最佳遊戲互動體驗。行動遊戲世界通常以觸控為主,因此需要思考如何為非觸控使用者提供最佳體驗。

首先,請參閱鍵盤、滑鼠和遊戲控制器支援的最佳做法。請特別注意使用者按住按鍵或可能按下多個按鍵的情況。

觸控式動作適用於配備觸控螢幕的 Chromebook,但為了提供優質體驗,請務必加入經過深思熟慮的實體控制項。舉例來說,滑鼠輸入非常適合調整視野或瞄準,但不應是執行動作的必要條件。如果行動遊戲提供螢幕上的選單,讓使用者能用拇指按下按鈕來使用火炬、劍或盾牌,要求他們用滑鼠點選這些按鈕就會造成不良體驗。而是應透過覆寫 onKeyUponKeyDown,指定鍵盤按鍵來觸發每個動作。詳情和程式碼請參閱輸入相容性頁面

滑鼠擷取

第一人稱視角遊戲實作滑鼠擷取功能後,在電腦上呈現的效果最佳。這會隱藏滑鼠指標,讓使用者透過滑鼠移動視點、瞄準、轉向等。以下是基本的滑鼠擷取示範,會在使用者點選名為 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 最多可支援四個遊戲控制器。開發人員應使用標準 Android 遊戲控制器 API 來支援這些控制器。

按鈕是對應至常用的值,同時使用常見的對應。但很遺憾地,並非所有遊戲控制器製造商都遵守相同的對應慣例。如果可以讓使用者選取不同的熱門控制器對應關係,即可提供更優質的體驗。