【6】アリクイあくしょんコード解説 164行目〜

JavaScript
// 左
const leftBtn = document.getElementById("left");
leftBtn.addEventListener("touchstart", (e) => { e.preventDefault(); keys["ArrowLeft"] = true; });
leftBtn.addEventListener("touchend", (e) => { e.preventDefault(); keys["ArrowLeft"] = false; });
leftBtn.addEventListener("mousedown", () => keys["ArrowLeft"] = true);
leftBtn.addEventListener("mouseup", () => keys["ArrowLeft"] = false);
leftBtn.addEventListener("mouseleave", () => keys["ArrowLeft"] = false);

// 右
const rightBtn = document.getElementById("right");
rightBtn.addEventListener("touchstart", (e) => { e.preventDefault(); keys["ArrowRight"] = true; });
rightBtn.addEventListener("touchend", (e) => { e.preventDefault(); keys["ArrowRight"] = false; });
rightBtn.addEventListener("mousedown", () => keys["ArrowRight"] = true);
rightBtn.addEventListener("mouseup", () => keys["ArrowRight"] = false);
rightBtn.addEventListener("mouseleave", () => keys["ArrowRight"] = false);

// ジャンプ
const jumpBtn = document.getElementById("jump");
jumpBtn.addEventListener("touchstart", () => {
  if (!player.isJumping && !jumpKeyPressed) {
    player.velocityY = jumpPower;
    player.isJumping = true;
    jumpKeyPressed = true;
  }
  keys["Space"] = true;
});
jumpBtn.addEventListener("touchend", () => {
  keys["Space"] = false;
  jumpKeyPressed = false;
});
jumpBtn.addEventListener("mousedown", () => {
  if (!player.isJumping && !jumpKeyPressed) {
    player.velocityY = jumpPower;
    player.isJumping = true;
    jumpKeyPressed = true;
  }
  keys["Space"] = true;
});
jumpBtn.addEventListener("mouseup", () => {
  keys["Space"] = false;
  jumpKeyPressed = false;
});
jumpBtn.addEventListener("mouseleave", () => {
  keys["Space"] = false;
  jumpKeyPressed = false;
});

// 攻撃
const attackBtn = document.getElementById("attack");
attackBtn.addEventListener("touchstart", () => {
  if (!isAttacking && canAttack) {
    isAttacking = true;
    canAttack = false;
    attackTimer = 10;
  }
  keys["ArrowUp"] = true;
});
attackBtn.addEventListener("touchend", () => {
  keys["ArrowUp"] = false;
  canAttack = true;
});
attackBtn.addEventListener("mousedown", () => {
  if (!isAttacking && canAttack) {
    isAttacking = true;
    canAttack = false;
    attackTimer = 10;
  }
  keys["ArrowUp"] = true;
});
attackBtn.addEventListener("mouseup", () => {
  keys["ArrowUp"] = false;
  canAttack = true;
});
attackBtn.addEventListener("mouseleave", () => {
  keys["ArrowUp"] = false;
  canAttack = true;
});

const leftBtn = document.getElementById(“left”);

たかまる
たかまる

最初のほうで解説したものとほぼ同じだけど、復習も兼ねてもう一度説明するね。

  • const leftBtn
    → 要素を leftBtn という名前の定数に保存。
    この後で leftBtn を使ってクリックイベントを設定したり、スタイルを変更したりできる。
  • document
    → 現在の HTML ページ全体(DOM)を指す。
  • get
    → 取得。
  • Element
    → HTML内の「タグ(要素)」を JavaScript で表したもの。
    HTML要素(= Element)。
  • getElementById(“left”)
    → HTML 要素の中から left と設定 (id="left")されたIDを探して取得。存在しない場合は null (「何もないこと」を明示的に示す値)を返す。
イカクくん
イカクくん

この行の JavaScript は、HTML ドキュメント内の id 属性が "left" の要素を取得し、それを leftBtn という定数に代入しているってことなんだね。

touchstartイベント

leftBtn.addEventListener("touchstart", (e) => { e.preventDefault(); keys["ArrowLeft"] = true; });
たかまる
たかまる

またイベントリスナーが出てきたね。
前回はkeydown(キーダウン)とkeyup(キーアップ)っていうイベントだったけど、
今回はtouchstart(タッチスタート)だよ。

leftBtn にイベントリスナー(イベントが起きたら実行する関数)をつけている。

touchstart
→ スマホやタブレットで指を置いた瞬間に発生するイベント。

preventDefault()

→ 組み込み関数。オブジェクトの操作を定義したもの。
「prevent」=止める、「default」=デフォルト動作。
ブラウザのデフォルトの動作を止める。

たかまる
たかまる

ここでleftBtnを辿ってみよう。
まず1行前に戻ると、
const leftBtn = document.getElementById(“left”);
で、HTMLのID “left“の要素を代入したよね。
んでそもそもleftってなんだって話なんだけど、
ボタンタグにつけたIDだよ。

イカクくん
イカクくん

そういえば、スマホでプレイしたとき操作用のボタンがあった!

たかまる
たかまる

HTMLとCSSでつくったボタンが作動するように準備しているんだ。
つまりこれはスマホ用ボタンの処理ってわけ。

preventDefault()

イカクくん
イカクくん

preventDefault()ってカッコの中身が空っぽなのはどうして?

たかまる
たかまる

JavaScriptでは、関数を実行するときは必ず () を書くんだよ。

書き方意味
preventDefault関数そのもの(まだ実行していない)
preventDefault()関数を実行する(←これが重要!)

💬「空カッコ」なのはなぜ?

preventDefault()引数(ひきすう)を必要としない関数 だから。

つまり、「何か特別な値を渡さなくても使える」= カッコの中に何も書く必要がない、ということ。

イカクくん
イカクくん

e.preventDefault()のeの部分って引数じゃないの?

たかまる
たかまる

e preventDefault() の引数ではないよ。
addEventListener(“touchstart”, (e) => { … })
の引数
で、そのeを呼び出してるだけだよ。

ここまでをまとめると…

指でボタンをタッチしたとき

e.preventDefault() でスクロールなどの標準動作を防ぐ

keys["ArrowLeft"]true にする

各イベントの意味

touchstart 指が画面上の要素に触れた瞬間に発生

touchend 指が画面から離れた瞬間に発生

mousedown マウスのボタンを押した瞬間に発生

mouseup マウスのボタンを離した瞬間に発生

mouseleave マウスカーソルが、対象の要素の外に出た瞬間に発生

たかまる
たかまる

あとは、似たようなコードだから省略するね。

イカクくん
イカクくん

おっけー!
次行ってみよう!

コメント

タイトルとURLをコピーしました