多くの 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) } }
チャット
チャット機能は、マルチプレイヤー ゲームの重要なコンポーネントになる可能性があります。ユーザーがゲームのチャット機能をプレイ中にどのように使用するかを考えてみましょう。特に、キーボードでプレイしている場合は、チャットにアクセスしたりメッセージを送信したりするためにマウスやタッチスクリーンを使用する必要がないようにする必要があります。
1 つのパターンとして、キーボードのキーでチャット ボックスにフォーカスし、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 つのゲーム コントローラをサポートします。デベロッパーは、標準の Android ゲーム コントローラ API を使用してそれらをサポートする必要があります。
ボタンは、一般的なマッピングに従って一般的な値にマッピングされます。残念ながら、すべてのゲーム コントローラ メーカーが同じマッピング規則に従っているわけではありません。各種の一般的なコントローラ マッピングをユーザーが選択できるようにすると、エクスペリエンスを大幅に向上させることができます。