「スクラッチでマリオのゲームをつく特大とくだいレッスン#08 てきモブを召喚しょうかんせよ3 」の解説

さいじゃく
スクラッチでマリオのゲームを作る特大レッスン#09 敵モブを召喚せよ3
敵モブを「○秒待つ」を使わずにアニメーションする方法が分かります!
スタータープロジェクト

リミックスしてスタート
ファイルをダウンロード
(Scratchデスクトップ用)

完成サンプル
Scratch公式サイト

前回に引き続き、敵モブを作り込みます。

アニメーションする

敵モブのアニメーションでもコマを使う作戦にします。これはプレイヤーでも実装した作戦です。ただプレイヤーは歩くスピードが変わるのに対して、敵モブは基本的に一定スピードで動きます。そのためコマが変わる速度も一定間隔でOKです。

具体的には、プレイヤーで必要だった変数「コマスピード」が敵モブでは不要になります。

ブロック定義「アニメーションする」を作る

利用する

変数「コマ」を作る

初期化する
利用する

コマでコスチュームを変える

「○秒待つ」ブロックではなく、変数「コマ」を利用してアニメーションのスピード調整をしていきます。制御ブロックを使って処理を止めるのではなく、演算の特徴を使ってスピードをコントロールします。

これのメリットは、処理が止まらないのでカクカクしづらい点です。

ステップ1

コスチュームを変えるブロックを置きます。

ステップ2

「りんごとバナナ」で変数「モブ名」と数字を利用します。これはコスチューム名と連動しています。

スクラッチでマリオのゲームを作る特大レッスン#09 敵モブを召喚せよ3を語るさいじゃく さいじゃく

前提として、移動のコスチューム名は「モブ名 + 数字」である必要があります。スライムなら、スライム1とスライム2が移動用のコスチュームになります。

ステップ3

「切り上げ」ブロックと「剰余演算」ブロックを使います。剰余演算に入れる数字は、移動用のコスチュームの数です。

ステップ4

1をプラスします。理由は、剰余演算では2 ÷ 2 = 0になってしまうからです。コスチューム名は1から始まるため、プラス1します。

ステップ5

モブ名の後ろに合体させます。

ステップ6

これで完成です。

動作確認する

目が進行方向に動いている様が確認できます。

移動用のコスチュームを数える

ステップ3で直接2という数値を剰余演算に指定しました。いわゆるマジックナンバーですね。プログラミングのマナーが良いとは言えません。

また、これは敵モブによって数が変わる可能性が高いので、変数化しておきます。

ブロック定義「移動のコスチュームを数える」を作る

オプションにチェックを入れます。

利用する

ブロック定義「初期化する」内で使います。

変数「移動のコスチューム数」を作る

初期化する

ステップ1

コスチュームを1つ目の移動用コスチュームに着替えます。

ステップ2

「りんごにりが含まれる」ブロックを置いて、左側にはコスチュームの「名前」を入れます。

スクラッチでマリオのゲームを作る特大レッスン#09 敵モブを召喚せよ3を語るさいじゃく さいじゃく

このブロックはブロックパレットにあるときは「コスチュームの番号」がデフォルトになっています。

ステップ3

「りんごとバナナ」ブロックを使います。

ステップ4

ステップ5

合体させます。

ステップ6

更に合体します。

ステップ7

「ではない」ブロックで全体を否定します。

ステップ8

これを「○まで繰り返す」ループブロックの条件式に使います。

意味としては、コスチューム名に「モブ名+数字」が含まれている間は処理を繰り返すという感じです。

ステップ9

ループで何をしたいかと言うと、コスチューム数をカウントアップしていきたいので、変数「移動のコスチューム数」をプラス1ずつしていきます。

ステップ10

次のコスチュームに着替えます。

ステップ11

コスチュームをもとに戻しておきます。

条件式にたくさんブロックを使いましたが、やることはこれだけです。

これで敵モブに何個コスチュームがあっても、動的にカウントされるようになりました。敵モブを増やす準備が着々と整ってきていますね。

マジックナンバーを変数で置き換える

アニメーションの処理で直接入力していたマジックナンバーの2を変数化しておきます。

動作確認する

ねんのためさっきと動作が変わってないか確認しておきましょう。

方向転換したら向きを変える

壁に当たると方向転換しますが、向きが変わっていないため不自然になってしまいます。これも直していきます。

反対側を向かせる

進行方向という変数があるので、これを利用します。

ステップ1

ステップ2

ステップ3

ステップ4

ブロック定義「方向転換する」内に追加します。これで壁に当たったら向きも変わります。

動作確認する

敵モブが襲いかかってきた!

基本的な移動はだいたいできました。本当はジャンプや特殊な動きなども加味する必要がありますが、それはマリオの敵モブを実装する際に作り込んでいこうと思います。

さきどりして次のような動きを想定していることを共有しておきます。

敵モブ特殊な動き
クリボーとくになし
ノコノコ本当は特にないが、崖があっても直進せずに方向転換して、落ちないようにしたい
テレサプレイヤーを追いかける。X軸だけでなく、Y軸にも移動してフワフワ動く。
パタパタ一定間隔でジャンプする。
キラー重力の影響を受けずに直進する。
パックンフラワーX軸に移動しない。ときどきジャンプする。
クッパ火の玉を吐く。ジャンプする。めちゃ強いw

こういう敵モブをゆくゆくは実装したいです。土台作りもあと少し。一緒に頑張っていきましょう!

次回は戦う機能を作ります。

こちらも数日以内に更新していきます!ブクマよろしくお願いします!(更新しました、以下の目次からどうぞ!)