スクラッチに挑戦している皆さん、どうも!スクラッチコーチです。
質問テンプレート(素早く3回クリックすると全選択できるのでコピーしよう)
・◯◯ ... 記事のどこまで実装が終わったのかを記入しよう。・□□ ... どんな問題が起きているのか、どういうときに起きるのか、具体的に書こう。
・共有済みURL ... たまに共有してない作品URLを書いてる人がいるけど、共有しないとこちらから確認できないからよろしくね。
前回に引き続き、敵モブを作り込みます。
アニメーションする
敵モブのアニメーションでもコマを使う作戦にします。これはプレイヤーでも実装した作戦です。ただプレイヤーは歩くスピードが変わるのに対して、敵モブは基本的に一定スピードで動きます。そのためコマが変わる速度も一定間隔でOKです。
具体的には、プレイヤーで必要だった変数「コマスピード」が敵モブでは不要になります。
ブロック定義「アニメーションする」を作る
変数「コマ」を作る
初期化する
利用する
コマでコスチュームを変える
「○秒待つ」ブロックではなく、変数「コマ」を利用してアニメーションのスピード調整をしていきます。制御ブロックを使って処理を止めるのではなく、演算の特徴を使ってスピードをコントロールします。
これのメリットは、処理が止まらないのでカクカクしづらい点です。
ステップ1
コスチュームを変えるブロックを置きます。
ステップ2
「りんごとバナナ」で変数「モブ名」と数字を利用します。これはコスチューム名と連動しています。
前提として、移動のコスチューム名は「モブ名 + 数字」である必要があります。スライムなら、スライム1とスライム2が移動用のコスチュームになります。
ステップ3
「切り上げ」ブロックと「剰余演算」ブロックを使います。剰余演算に入れる数字は、移動用のコスチュームの数です。
ステップ4
1をプラスします。理由は、剰余演算では2 ÷ 2 = 0になってしまうからです。コスチューム名は1から始まるため、プラス1します。
ステップ5
モブ名の後ろに合体させます。
ステップ6
これで完成です。
動作確認する
目が進行方向に動いている様が確認できます。
移動用のコスチュームを数える
ステップ3で直接2という数値を剰余演算に指定しました。いわゆるマジックナンバーですね。プログラミングのマナーが良いとは言えません。
また、これは敵モブによって数が変わる可能性が高いので、変数化しておきます。
ブロック定義「移動のコスチュームを数える」を作る
オプションにチェックを入れます。
利用する
ブロック定義「初期化する」内で使います。
変数「移動のコスチューム数」を作る
初期化する
ステップ1
コスチュームを1つ目の移動用コスチュームに着替えます。
ステップ2
「りんごにりが含まれる」ブロックを置いて、左側にはコスチュームの「名前」を入れます。
このブロックはブロックパレットにあるときは「コスチュームの番号」がデフォルトになっています。
ステップ3
「りんごとバナナ」ブロックを使います。
ステップ4
ステップ5
合体させます。
ステップ6
更に合体します。
ステップ7
「ではない」ブロックで全体を否定します。
ステップ8
これを「○まで繰り返す」ループブロックの条件式に使います。
意味としては、コスチューム名に「モブ名+数字」が含まれている間は処理を繰り返すという感じです。
ステップ9
ループで何をしたいかと言うと、コスチューム数をカウントアップしていきたいので、変数「移動のコスチューム数」をプラス1ずつしていきます。
ステップ10
次のコスチュームに着替えます。
ステップ11
コスチュームをもとに戻しておきます。
条件式にたくさんブロックを使いましたが、やることはこれだけです。
これで敵モブに何個コスチュームがあっても、動的にカウントされるようになりました。敵モブを増やす準備が着々と整ってきていますね。
マジックナンバーを変数で置き換える
アニメーションの処理で直接入力していたマジックナンバーの2を変数化しておきます。
動作確認する
ねんのためさっきと動作が変わってないか確認しておきましょう。
方向転換したら向きを変える
壁に当たると方向転換しますが、向きが変わっていないため不自然になってしまいます。これも直していきます。
反対側を向かせる
進行方向という変数があるので、これを利用します。
ステップ1
ステップ2
ステップ3
ステップ4
ブロック定義「方向転換する」内に追加します。これで壁に当たったら向きも変わります。
動作確認する
敵モブが襲いかかってきた!
基本的な移動はだいたいできました。本当はジャンプや特殊な動きなども加味する必要がありますが、それはマリオの敵モブを実装する際に作り込んでいこうと思います。
さきどりして次のような動きを想定していることを共有しておきます。
敵モブ | 特殊な動き |
クリボー | とくになし |
ノコノコ | 本当は特にないが、崖があっても直進せずに方向転換して、落ちないようにしたい |
テレサ | プレイヤーを追いかける。X軸だけでなく、Y軸にも移動してフワフワ動く。 |
パタパタ | 一定間隔でジャンプする。 |
キラー | 重力の影響を受けずに直進する。 |
パックンフラワー | X軸に移動しない。ときどきジャンプする。 |
クッパ | 火の玉を吐く。ジャンプする。めちゃ強いw |
こういう敵モブをゆくゆくは実装したいです。土台作りもあと少し。一緒に頑張っていきましょう!
次回は戦う機能を作ります。
こちらも数日以内に更新していきます!ブクマよろしくお願いします!(更新しました、以下の目次からどうぞ!)
- ① 横スクロールを制覇せよ
- ② ジャンプせよ
- ③ 壁・坂を攻略せよ
- ④ ゴールして次へ
- ⑤ ブロックを壊せ
- ⑥ スタックを回避せよ (バグ修正の回)
- ⑦ コインをゲットせよ
- ⑧ 敵モブを召喚せよ1 (クローン化、スポーン、横移動など)
- ⑨ 敵モブを召喚せよ2 (方向転換や重力)
- ⑩ 敵モブを召喚せよ3 (いまここ)
- ⑪ バトル開始1 (ダメージを受ける・与える)
- ⑫ バトル開始2 (ダメージのアニメーション、フィードバック)
- ⑬ 敵モブをリスポーンさせる
- ⑭ iPadに対応する
- ⑮ 迫りくるパタパタ (敵モブに新しい動きを追加する手順が分かる)
- ⑯ パタパタのバグ修正 (ジャンプのバグを直す)
- ⑰ 壁に埋もれるバグ修正 (バグがバグを呼ぶ、でも諦めない)