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

JavaScript
たかまる
たかまる

プレイヤーの次はエネミーズだよ。

function drawEnemies() {
  enemies.forEach(enemy => {
    if (enemy.vx && enemy.vx > 0) {
      ctx.save();
      ctx.translate(enemy.x - worldX + enemy.width / 2, enemy.y + enemy.height / 2);
      ctx.scale(-1, 1);
      ctx.drawImage(
        enemyImg,
        -enemy.width / 2,
        -enemy.height / 2,
        enemy.width,
        enemy.height
      );
      ctx.restore();
    } else {
      ctx.drawImage(
        enemyImg,
        enemy.x - worldX,
        enemy.y,
        enemy.width,
        enemy.height
      );
    }
  });
}
イカクくん
イカクくん

Enemiesって日本語で敵っていう意味だから、
これは敵の描写についてだね。

enemies.forEach(enemy => {

enemies という 配列 に対して、
.forEach() メソッドを使って、各要素(enemy)に対して同じ処理を 順番に実行

たかまる
たかまる

forEach()は、
配列の全ての要素に対して、指定した関数を順番に1回ずつ実行。
前に解説したの覚えてるかな?

if (enemy.vx && enemy.vx > 0) {

enemy.vx が存在していて、かつ enemy.vx が 0 より大きいなら処理を行う。

イカクくん
イカクくん

&&は両方満たすときだけ中の処理を実行するんだったよね!

条件を満たした時の処理

      ctx.save();
      ctx.translate(enemy.x - worldX + enemy.width / 2, enemy.y + enemy.height / 2);
      ctx.scale(-1, 1);
      ctx.drawImage(
        enemyImg,
        -enemy.width / 2,
        -enemy.height / 2,
        enemy.width,
        enemy.height
      );
      ctx.restore();
    } else {
      ctx.drawImage(
        enemyImg,
        enemy.x - worldX,
        enemy.y,
        enemy.width,
        enemy.height
      );
    }
たかまる
たかまる

前回解説した、260行目のfunction drawPlayer()とほぼ同じだから
ここの解説は省略するね!

イカクくん
イカクくん

じゃぁ次に行こう!

コメント

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