虽然许多 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 最多支持四个游戏控制器。开发者应使用标准的 Android Game Controller API 来支持这些游戏控制器。
按钮按照通用映射映射到通用值。遗憾的是,并非所有游戏控制器制造商都遵循相同的映射惯例。允许用户从不同的常见控制器映射中进行选择,可以提供更好的体验。