# キャンセルを完全な入力パスとして扱う

> ブラウザーがポインターをキャンセルしたときにドラッグとホールドされたアクションを安全に終了し、スクロール、回転、または中断後のコントロールのスタックを回避します。

- URL: https://oneshotgems.ai/ja/topics/pointer-cancellation-in-games
- カテゴリ: ゲーム開発者向け
- 種類: ガイド
- 更新日: 2026年10月5日

ポインター操作は必ずしも pointerup で終わるとは限りません。タッチ操作がページのスクロールや拡大に切り替わったときや、端末またはブラウザーがそのポインターのイベントを送れなくなったとき、ブラウザーは操作をキャンセルすることがあります。ゲームの状態遷移でキャンセルを扱っていないと、ドラッグ中のオブジェクトがつかまれたままになったり、押し続ける操作が終わらなくなったりします。

## クリーンアップを冪等にする

pointerdown がドラッグを開始すると、アクティブな pointerId と、それが所有するオブジェクトまたはアクションを保存します。 pointerup と pointercancel は両方とも、その対話を終了し、その状態をクリアする必要があります。クリーンアップ処理は、アクション終了後にもう一度呼び出しても問題が起きないようにします。これにより、キャプチャの損失、ウィンドウの変更、および繰り返しの防御クリーンアップの処理が簡素化されます。

ポインターキャプチャを使用している場合は、インタラクションがポインターを所有しなくなったことを示す別の信号として、lostpointercapture をリッスンします。ゲームでその結果が明示的に定義されていない限り、キャンセルを配置成功として解釈しないでください。ドラッグをキャンセルすると、オブジェクトが開始位置に戻されるか、最後の有効な位置が維持されるか、移動がキャンセルされることがあります。ルールを 1 つ選択し、視覚的なフィードバックでそれを伝えます。

## ブラウザジェスチャの引き継ぎをテストする

ゲーム表面で開始して画面端に向かって継続するドラッグ、表面上で開始する垂直ページ スクロール、ホールド中の回転、および 2 本目の指で別の場所に触れてみてください。キャンセル後にキャラクターが動き続けたり、ボタンが押されたままになっていないことを視覚的に確認します。

touch-action プロパティは、ブラウザがどのジェスチャを処理するかに影響します。 MDN は、ブラウザーがパンまたはズームを引き継ぐときにpointercancel を送信できると説明しています。キャンセルは、インタラクション モデルが処理する必要がある通常の結果として扱います。

## よくある質問

**pointercancel は失敗したポインターアップですか?** これは、ポインタが現在の対話を継続しなくなるという別の信号です。クリーンアップを実行し、アクションが完了したとみなすのではなく、ゲームのキャンセル ルールを適用します。

**タッチ操作ですべてのポインタのキャンセルを防ぐことができますか?** いいえ。ブラウザによるタッチ ジェスチャの処理をガイドしますが、他の条件によってはポインタの配信が終了する可能性があります。ゲーム サーフェスにカスタム ジェスチャ ルールがある場合でも、キャンセル処理を継続します。

## 気になることを、もっと

- [ブラウザ ゲーム入力にポインタ イベントを使用する](https://oneshotgems.ai/ja/topics/pointer-events-for-games): ゲーム ループでのキャプチャ、デバイス ID、互換性動作を維持しながら、ポインタ イベントを通じてマウス、ペン、タッチをモデル化します。
- [Webゲームのタッチ操作を設計する](https://oneshotgems.ai/ja/topics/touch-controls-for-web-games): ブラウザーのジェスチャー、分かりやすいフィードバック、明確なポインター状態を踏まえてタッチ操作を設計し、スマートフォンでもゲームが予測どおりに反応するようにします。

## 関連情報

- [MDN: ポインターキャンセルイベント](https://developer.mozilla.org/en-US/docs/Web/API/Element/pointercancel_event)
- [MDN: タッチアクション](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/touch-action)

---
正規ページ: https://oneshotgems.ai/ja/topics/pointer-cancellation-in-games
