输入支持

虽然许多 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 Game Controller API 来支持这些游戏控制器。

按钮按照通用映射映射到通用值。遗憾的是,并非所有游戏控制器制造商都遵循相同的映射惯例。允许用户从不同的常见控制器映射中进行选择,可以提供更好的体验。