クリーンアップを冪等にする
pointerdown がドラッグを開始すると、アクティブな pointerId と、それが所有するオブジェクトまたはアクションを保存します。 pointerup と pointercancel は両方とも、その対話を終了し、その状態をクリアする必要があります。クリーンアップ処理は、アクション終了後にもう一度呼び出しても問題が起きないようにします。これにより、キャプチャの損失、ウィンドウの変更、および繰り返しの防御クリーンアップの処理が簡素化されます。
ポインターキャプチャを使用している場合は、インタラクションがポインターを所有しなくなったことを示す別の信号として、lostpointercapture をリッスンします。ゲームでその結果が明示的に定義されていない限り、キャンセルを配置成功として解釈しないでください。ドラッグをキャンセルすると、オブジェクトが開始位置に戻されるか、最後の有効な位置が維持されるか、移動がキャンセルされることがあります。ルールを 1 つ選択し、視覚的なフィードバックでそれを伝えます。
ブラウザジェスチャの引き継ぎをテストする
ゲーム表面で開始して画面端に向かって継続するドラッグ、表面上で開始する垂直ページ スクロール、ホールド中の回転、および 2 本目の指で別の場所に触れてみてください。キャンセル後にキャラクターが動き続けたり、ボタンが押されたままになっていないことを視覚的に確認します。
touch-action プロパティは、ブラウザがどのジェスチャを処理するかに影響します。 MDN は、ブラウザーがパンまたはズームを引き継ぐときにpointercancel を送信できると説明しています。キャンセルは、インタラクション モデルが処理する必要がある通常の結果として扱います。
ゲームでのポインターキャンセルについての質問
pointercancel は失敗したポインターアップですか?
これは、ポインタが現在の対話を継続しなくなるという別の信号です。クリーンアップを実行し、アクションが完了したとみなすのではなく、ゲームのキャンセル ルールを適用します。
タッチ操作ですべてのポインタのキャンセルを防ぐことができますか?
いいえ。ブラウザによるタッチ ジェスチャの処理をガイドしますが、他の条件によってはポインタの配信が終了する可能性があります。ゲーム サーフェスにカスタム ジェスチャ ルールがある場合でも、キャンセル処理を継続します。
関連情報
古い情報を見つけましたか? 訂正を連絡