衝突検出を実装するためのjs

衝突検出を実装するためのjs

この記事の例では、衝突検出を実装するためのjsの具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。

コード:

<!DOCTYPE html>
<html lang="ja">
 
<ヘッド>
  <メタ文字セット="UTF-8">
  <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
  <title>ドキュメント</title>
</head>
<スタイル>
  div {
    位置: 絶対;
    上: 0px;
    右: 0px;
    下: 0px;
    左: 0px;
    マージン: 自動;
    幅: 300ピクセル;
    高さ: 300px;
    背景色: 緑;
  }
  
  スパン {
    位置: 絶対;
    上: 0px;
    左: 0px;
    表示: ブロック;
    幅: 100ピクセル;
    高さ: 100px;
    背景色: rgb(10, 151, 233);
  }
</スタイル>
 
<本文>
  <div></div>
  <span></span>
  <スクリプト>
    タグ名で要素を取得する
    タグ名に要素を追加する
    span.onmousedown = 関数(e) {
      // イベント オブジェクトと互換性があります e = window.event || e;
      // グローバルキャプチャを追加 if (span.setCapture) {
        span.setCapture();
      }
      // マウスを押すと、マウスとページの左上との距離が取得されます。var x = e.clientX;
      var y = e.clientY;
      // 要素とページの左上と左上の間の距離 var elex = span.offsetLeft;
      var eley = span.offsetTop;
      // マウスと要素間の距離 = マウスとページ間の距離 - 要素とページ間の距離 var X = x - elex;
      変数 Y = y - エレ;
      document.onmousemove = 関数(e) {
        //マウスの動きにより、マウスとページ間の距離が取得されます //イベント オブジェクトと互換性があります e = window.event || e;
        var movex = e.clientX;
        var movey = e.clientY;
        // 要素の左と上の値 = マウスとページ間の距離 - マウスと要素間の距離 var leftx = movex - X;
        var lefty = movey - Y;
        /*--------------------------------------------------------*/
        // 衝突検出 // 1. 左の安全距離 = 大きなボックスとページの左側の間の距離 - 小さなボックスの幅 var safeleft = div.offsetLeft - span.offsetWidth;
        // 2. 右の安全距離は、大きなボックスとページの左側の間の距離 + 大きなボックスの幅です。var saferight = div.offsetLeft + div.offsetWidth;
        // 3. 上部の安全距離 = 大きなボックスとページの上部の間の距離 - 小さなボックスの高さ var safetop = div.offsetTop - span.offsetHeight;
        // 4. 下部の安全距離 = 大きなボックスとページの上部の間の距離 + 大きなボックスの高さ var safebottom = div.offsetTop + div.offsetHeight;
 
        (leftx < safeleft || leftx > saferight || lefty < safetop || lefty > safebottom)の場合 {
          div.style.background = '緑';
        } それ以外 {
          div.style.background = '赤';
        }
 
        /*--------------------------------------------------------*/
 
        // 境界値 // Leftif (leftx <= 0) {
          左x = 0;
        }
        // 左利き <= 0 の場合 {
          左利き = 0;
        }
        //右 var rightx = document.documentElement.clientWidth - span.offsetWidth;
        (左x >= 右x)の場合
          左x = 右x;
        // 次へ var righty = document.documentElement.clientHeight - span.offsetHeight;
        (左利き >= 右利き)の場合 {
          左利き = 右利き;
        }
 
 
        span.style.left = leftx + 'px';
        span.style.top = lefty + 'px';
      }
      document.onmouseup = 関数() {
 
          ドキュメント.onmousemove = null;
          (span.releaseCapture)の場合{
            span.releaseCapture();
          }
 
 
        }
        // デフォルトイベントを防止します。false を返します。
    }
  </スクリプト>
</本文>
 
</html>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • JS衝突検出方法の分析
  • JavaScriptでゲーム開発の衝突検出をカプセル化するコード
  • 衝突検出特殊効果コード共有を実現するjs
  • ネイティブJSで実装した衝突検出機能の例
  • 衝突検出を実装するためのネイティブ js
  • ポリゴン衝突検出を実装するJavaScript
  • JavaScript に基づく衝突検出の実装
  • ドラッグと衝突検出を実現するjs
  • 動くボールを実現するネイティブjs(衝突検出)
  • js で衝突検出を実装する例
  • three.jsは衝突検出にRaycasterを使用する

<<:  Windows で MySQL のルート パスワードを忘れた場合にリセットする方法

>>:  Linux システム ディスクのフォーマットとスワップ パーティションの手動追加

推薦する

Linuxでシンボリックリンクを削除(削除)するコマンド

Linux では、シンボリック リンクを作成または削除する必要がある場合があります。もしそうなら、何...

Vue パッケージアップロードサーバー更新 404 問題に対する 2 つの解決策

1: nginxサーバーソリューション、.conf構成ファイルを変更する解決策は2つある1: 位置 ...

MySQL クロスデータベーストランザクション XA 操作の例

この記事では、例を使用して、MySQL のデータベース間トランザクション XA 操作について説明しま...

Docker+keepalived+nginx を使用してマスタースレーブホットスタンバイを実装する方法の例

序文単一障害点を解決するには、マスター/スレーブ ホット スタンバイ ソリューションを構成する必要が...

RGBカラーテーブルコレクション

RGBカラーテーブル色英語名RGB 16色雪255 250 250 #FFFAFAゴーストホワイト2...

ローカルのMySQLをサーバーデータベースに移行する方法

Linux の scp コマンド (Windows では scp は使用できません) と、mysql...

3つの主要データベース(Mysql、SqlServer、Oracle)の違いについて簡単に説明します。

マイグレーションアドバンテージ:小型、高速、総所有コストが低い、オープンソース。複数のオペレーティン...

Vue が配列の変更を監視できない問題の解決方法

目次1. Vueリスナー配列2. vueが配列の変更を監視できない状況1. Vueリスナー配列Vue...

DockerでHadoopを実行しイメージを作成する方法

車輪の再発明として、ここでは再パッケージ化を使用して Docker ベースの Hadoop イメージ...

Navicateを使用してAlibaba Cloud Server上のMySQLに接続する

1. まず、サーバーの mysql にアクセスして権限を変更します。 GRANT オプション付きで、...

MySQL データ定義言語 DDL の基本ステートメント

MySQL DDL ステートメントDDL、DMLとは何ですか。 DDL はデータ定義言語であり、CR...

トップナビゲーションバー機能を実現するCSS+HTML

ナビゲーション バー、固定トップ ナビゲーション バー、およびセカンダリ メニューの実装効果図の実装...

MySQL をデプロイするときに発生する「テーブル mysql.plugin が存在しません」という問題の解決方法

今日、MySQL の無料インストール版をデプロイしたところ、テーブル 'mysql.plug...

Docker コンテナは実行後に終了します (実行を継続する方法)

現象Dockerコンテナを起動する docker run –name [コンテナ名] [コンテナID...

CSS は Alibaba ベクター ライブラリを使用して、対応する位置に見栄えの良いアイコン効果をすばやく追加します (サンプル コード)

Alibaba ベクターアイコンライブラリにアクセスAlibaba ベクターアイコンライブラリ好き...