スクラッチコーチキャンプ ゲームクリエイターに、オレはなる!そんなキミを応援(子供も大人も)
  • ALL
  • はじめての方へ
  • スクラッチゲームの作り方

    敵(エネミー)が現れた|スクラッチでアスレチックゲームの作り方⑲

    敵(エネミー)が現れた|スクラッチでアスレチックゲームの作り方⑲
    この記事は スクラッチコーチで掲載されているオリジナル記事 のバックアップです。
    スターター作品
    なし
    今回の完成サンプル
    なし

    プレイヤーを狙う凶暴なエネミーをアスレに加えていこう。奴らの目的はいったいなんなのか。どうしてプレイヤーの邪魔をするのか、そう思いを馳せるだけでゲームのシナリオができちゃいそうな刺激的な要素。プレイヤー以外の生き物を実装する初めての試みとして色々考えながらやっていくよ。

    一緒に見ていこう。

    今回の目標

    • うろうろするエネミーを作る
    • シーンごとに表示できるようにする
    • プレイヤーが触れるとダメージを受ける

    スプライト「エネミー」を作る

    あらたにスプライトを描こう。

    スプライト名はエネミー

    コスチュームを描く(レッド1)

    まず四角形を描くよ。色や大きさは違っててOK。

    上下の長方形を作る

    選択ツールに持ち替えて、四角の下側をつかみ、上方向にドラッグする。長方形に変える。

    この長方形をコピーボタンとペーストボタンを使って複製しよう。

    複製した方はさらに細い長方形にして、↓こんなかんじで上下にピタッとくっつけておいて。

    角に丸みを作る

    形を変えるツールに持ち替えて、左上の点を挟むように2つ点を加える。

    加えた2つの点の真ん中の点を削除する。

    右上にも同じことをして角に丸みを作る。

    目を描く

    円形ツールに持ち替えて、円い白目を描く。

    そして中に黒目も描こう。

    これで完成だ!これが今回のエネミーになるよ。

    コスチューム名はレッド1

    最初のコスはレッド1にしよう。

    このコスを複製して、角度を変えたものを用意していく。アニメーションさせたいからだよ。

    レッド2を作る

    レッド1を複製してレッド2を用意してほしい。

    レッド2の顔の角度を変える

    上側の長方形を選択して、角度を変えるツマミをつかって少しかたむけよう。少し口を開けた状態だね。

    レッド3を作る

    レッド2を複製しよう。コスチューム名はレッド3にしておいてほしい。

    レッド3は、さらに大きく口を広げた状態にする。

    レッド4を作る

    再びレッド2を複製しよう。レッド3じゃなくてレッド2を複製するよ。

    これは何もせずにレッド4という名前に変えればOK。

    アニメーション用のコスチュームを手動で切り替えてテストする

    手で素早くコスチュームを切り替えてアニメーションのイメージをつかむよ。

    うん、シンプルでよさそう。

    倒された時のコスチュームも用意しておく

    プレイヤーによってエネミーが倒された時のコスもつくろう。レッド1を複製しよう。

    コス名はレッドダウンにしようか。それで選択ツールを使って全体をつぶすようにして、左右にも少し広げておくといいかも。

    シーンごとに敵をスポーンさせる

    クローンを使っていくので、とりあえず緑の旗が押されたら本体を隠すようにしようか。

    回転方法を左右のみにしておく。

    シーンを切り替えるを受け取った時

    シーン番号が1のときに指定した座標に移動させよう。

    向きも整えてからクローンを作ろう。

    クローンされたとき

    ここで表示されるようにする。

    エネミーが現れるようになったかテストする

    いったんこんな感じでOKだ!

    でもこのままだと↓こうなる。

    うん、だよね。シーンを切り替えるっていうメッセージで表示しているけど、隠す処理がないからずっと表示されちゃう。まだまだ改善が必要そうだね。やってみよう!

    エネミーを消す

    スプライト「プレイヤー」を開く

    メッセージ「シーンを切り替える準備をする」を作る

    定義「シーンの切り替え処理を行う」にて、シーンを切り替える直前でこのメッセージを送る

    スプライト「エネミー」を開く

    シーンを切り替える準備をするときに、クローンを削除するようにする。

    シーンが切り替わるとエネミーが消えたかテストする

    よし、シーン2にはクローンが現れなくなったね。

    エネミーに重力を適用する

    次にエネミーをしっかり地面に接するようにしたいので、重力処理を作っていくよ。

    変数「スピードY」をつくる

    クローンされた時に、ループを使ってY座標を減らし続けるようにしよう。

    エネミーが下方向に下がるようになったかテストする

    まぁ、こうなるよねw おっけ。

    定義「_落ちる」をつくる

    クローンされた時で作ったY座標を減らす処理を、この定義に移す。

    さらに、ステージから離れるまで繰り返すループを作り、逆方向にY座標を動かす処理を作り、ステージに埋もれないようにする。

    エネミーがステージに着地できるようになったかテストする

    おっけー。これでゲーム物理上は自然になったね。

    エネミーが左右に移動するようにする

    さて、動かないエネミーがいてもいいけど、今回のレッドは左右に動くようにしたい。そうすることでプレイヤーはエネミーの移動スピードを考えながらジャンプするタイミングを考える必要がでて、ゲームに新しい「タイミング」が生まれる。いろんなタイミングを考えながら攻略する必要があるアスレほど難易度が高く、やりがいが生まれる。

    定義「_左右に動く」を作る

    とりあえず2歩動かす。

    壁に当たったら反転するための条件ブロックを作る。

    反転はカンタンに逆に2歩動いて向きを変えればOK。

    この定義をクローンされた時のずっとループないで実行する。

    エネミーがウロチョロするようになったかテストする

    よしよし。ザコっぽい動きw

    凸凹《》してても進むようにする

    今回のステージは真っ平だからいいけど、ゲームによってはステージがデコボコしてたり、トゲトゲしてたりする。洞窟のシーンとかなら足元が悪いのはよくある。しかし困るのは、このままだとエネミーが止まっちゃうということだ。

    ためしに↓こんなちょこっとしたトンガリをつくってみると、エネミーが反転しちゃうことがわかる。

    スプライト「エネミー」にタテ方向の処理を追加する

    左右に動くところに「4回繰り返す」ループを作ろう。この数字はちょっとした凸凹に対応したいから少なめにしてる。けど、変えても大丈夫だよ。増やせば結構なトンガリでも乗り越える。

    この中で条件ブロックを作る。

    ステージまたは端から離れてる状態なら、ストップする。

    そうではないなら、Y座標を1加算してみる。

    このループを抜けたら、Y座標をマイナス4する。4回繰り返すループで最大プラス4されてるY座標を元に戻してる感じ。

    凸凹やなだらかな坂道にも対応できるかテストする

    おお、このほうが敵として使い勝手がいいね。洞穴シーンみたいなところでも動けるようになった。プレイヤーにとっては脅威が増したわけだ、クククククっ。

    坂道を急にしておいた

    エネミーのアニメーションを作る

    ここでもコマを利用したアニメーションを実装していくよ。

    準備として回転方法とコスの設定を追加しよう。

    変数「コマ」を作る

    クローンされた時に初期化しておく。ついでにスピードYの初期化もしちゃう。

    ループないでコマの値を少しずつ加算しよう。ここを変えるとアニメーションのスピードが変わるよ。

    このコマの値をコスチュームの選択に使うための演算を組む。ちと複雑だからスクショを見ながら注意深く演算を作ってみて。

    完成系としてはこんな感じ。「()で割った余り」という、いわゆる剰余演算を使っている。ここに入る4という値はレッドのアニメーション用のコスチュームが何個あるかを示しているよ。さっきレッド1からレッド4まで作ったよね、あの4。

    コマの値を変えたあとにコスチュームをセットするブロックに演算をはめよう。

    エネミーのアニメーションが機能しているかテストする

    おおお!パクパクしておる!噛みつかれたら痛そうだぜ!

    プレイヤーがダメージを受けるようにする

    エネミーにぶつかったらプレイヤーがダメージを受けるようにしたい。

    定義「プレイヤーに触れた」をつくる

    クローンされた時のループに条件ブロックを追加しよう。その中で実行する。条件式はあとで作るよ。

    定義内ではとりあえずメッセージ「ダメージを受けた」を送ろう。

    変数「★無敵状態か」をつくる

    突然だけど、無敵状態か調べる変数を作る。これを作る理由は、もうちょっと後で説明するね。

    この変数を含めて、プレイヤーに触れたかどうかを判定するよ。

    スプライト「プレイヤ=」を開く

    メッセージ「ダメージを受けた」を受け取った時に、無敵状態を1にしよう。

    ちなみに定義「スタートする」では初期化も行っておく。

    敵(エネミー)が現れた|スクラッチでアスレチックゲームの作り方⑲を語るok-scratch ok-scratch

    u003cpu003e無敵状態か、という変数を用意した理由は、エネミーとプレイヤーが触れてる間ずっとメッセージ「ダメージを受けた」が送られてしまうと、1度の接触で何回もダメージが受けた判定になってしまうからなんだ。だからダメージを受けたらいったんプレイヤーを無敵状態にして、続けて何度もダメージを受けないようにしているんだよ。u003c/pu003e

    エネミーが凶悪wになったかテストする

    素晴らしい!我がダンジョンを守るガーディアンとしての役目を立派に果たしてくれておる!フワハハハハ!(どした?)

    まとめ

    嬉しすぎてちょっと我を忘れてしまったよ。最強のエネミーができたね。だってまだプレイヤーがどうあがいても倒せない状態だもんねw そりゃ最強だわ。

    まぁこのままじゃアンフェアだし、ちゃんとプレイヤーにも生き残るチャンスを与えてあげましょうか。次回はちゃんとエネミーを倒せるように実装していくぞ!

    シンプルに見えて色々考える必要があるから、次回も一緒に見ていこう!

    当連載で取り上げるグリフパッチさんの動画はこちら

    この記事への質問やコメントをどうぞ

    ただいま実験的に質問を受け付けています。

    コメントは受け付けていません。

    スパム防止のため、 質問をするにはログインが必要 です。ログインはスクラッチのアカウントがあれば誰でもできます。

    ブクマよろしくお願いします!という口コミを寄せてくれた方 ブクマよろしくお願いします!
    どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!