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

    壁ジャンプ|スクラッチでアスレチックゲームの作り方⑨

    壁ジャンプ|スクラッチでアスレチックゲームの作り方⑨
    この記事は スクラッチコーチで掲載されているオリジナル記事 のバックアップです。
    スターター作品
    なし
    今回の完成サンプル
    なし

    壁スライドは超かっこいい。でもそれだけじゃ終われない!さらなるゴージャスな機能を追加したい。そう壁スライドからの壁ジャンプだ。ここまできたら商業作品ばりの品質に近づいたと言える。いっしょに見ていこう。

    今回の目標

    • 壁スライドしている状態から↑キーを押すと壁ジャンプができるようにする
    • 壁ジャンプはタテ方向には連続してできないようにすることで、チート感を防ぎたい

    スプライト「プレイヤー」

    もちろんプレイヤーだ。プレイヤーを開いておいてほしい。

    定義「_上下の動きを処理する」を改修する

    ↑キーが押されたタイミングで条件ブロックを追加する。

    条件式には壁スライドできるかどうか、そしてジャンピングがゼロかどうかを調べる演算を組む。これは、壁スライド中だけどジャンプしてない状態、すなわち壁ジャンプが出来る状態であることを調べるわけだ。

    壁ジャンプが出来る状態で↑キーが押されたという条件ブロックの中では、まず変数に値を入れていく。

    さらにプレイヤーの向きを反転する。

    スピードXに反対方向の力を加える

    ジャンプしたらX方向にも飛んでほしいので、スピードXに値を入れる。どんな値を入れればいいだろうか。右向きのときはプラスの力を加えたいし、左向きのときはマイナスの力を加えたい。

    回転方向は左右のみだから、右向きなら90度、左向きならマイナス90度のはずだよね。その状態を利用して以下のような演算を組んでみてほしい。

    まず向き÷90を作る。

    そこに7をかけよう。

    こうすることで向いている方向に7の力が加わる。右向きならプラス7、左向きならマイナス7だ。これをスピードXにセットしよう。

    壁ジャンプが実現できたかテストする

    ふっふー♪あっというまに壁ジャンプが成功したぜ!ここまでしっかり作り込んできたからこそ、こんなに簡単にジャンプを拡張できた。美しいコーディングは管理が楽だからいいね。

    チート発見!防止しよう

    おっと!喜んでいたらチート機能を見つけてしまった。

    これは困るね。今回みたいなアスレで無限にタテ方向の壁ジャンプが出来ると、ゲームが簡単になりすぎてしまう。修正していこう。

    変数「ジャンプ中の移動制限」を作る

    このチートの原因はジャンプ中でもX方向に動けること。ジャンプしてすぐに壁に戻るようにキー操作して再び壁に張り付いてジャンプする、っていう挙動になってしまうからなんだ。

    そこで変数を用意してジャンプ中はX方向に移動できないようにしたい。

    定義「_上下の動きを処理する」で値をセットする

    これに12という値を入れよう。

    壁ジャンプ|スクラッチでアスレチックゲームの作り方⑨を語るok-scratch ok-scratch

    u003cpu003e12っていうのは、この下で判定で使うんだけど、「どのくらいの時間、X方向への移動を制限したいか」っていう値になるよ。大きくしても小さくしても大丈夫だから、キミのゲームに合わせて調整してみてほしい。小さすぎると無限壁ジャンプチートが成立してしまうから、何度もテストして決めてね。u003c/pu003e

    定義「_左右の動きを処理する」で値をチェックする

    最初に条件ブロックを追加する。

    ここで変数を調べて、0より大きい状態なら1ずつ減らすようにしよう。

    定義「スタートする」で初期化する

    もろもろの変数を初期化するようにしよう。

    これで壁ジャンプのチートは直った……っと思っていたんだが。

    さらなる壁ジャンプのバグを直す

    ここからは実は、後日グリフパッチさんによってバグ修正動画が新しく投稿された内容になるよ。わざわざ動画を作ってまで直したかったバグってどんなんだろうか。見てみよう。

    あと、この動画はチュートリアルがもっともっと進んでから修正されたんだけど、直すタイミングとしては壁ジャンプを実装したこのタイミングがいいかなと思って、動画の順番とは違うけど今回直してしまおうと思う。

    このショート動画を見てほしい。スライドしつつ、→キーを押した瞬間に↑キーを押すことで、タテ方向への壁ジャンプチートが実現してしまっている。これはゲームブレーカーになりうる致命的なチートなので、徹底的に修正しておきたい。

    壁ジャンプ|スクラッチでアスレチックゲームの作り方⑨を語るok-scratch ok-scratch

    u003cpu003eちなみに壁を上方向にスライドできているのもバグだね(^_^;)u003c/pu003e

    定義「_左右の動きを処理する」を改修する

    キーXの値があるとき、つまり←か→キーのどっちかが押されている状態のところに条件ブロックを追加してほしい。

    そして次の演算を組んでほしい。

    キーX × 90は、右向きなら90だし、左向きならマイナス90になる。それが今向いている「向き」と違うかどうかを調べる条件式を作る。

    壁ジャンプ|スクラッチでアスレチックゲームの作り方⑨を語るok-scratch ok-scratch

    u003cpu003eつまり右向きのときに←を押したり、左向きのときに→を押したケースを調べているよ。u003c/pu003e

    ここで変数「壁スライドできるか」をゼロにして強制的にスライド状態を終わらせる。

    こうすることで同じ壁を縦方向にズンズン登っていけるジャンプを防ぐことが出来る。

    まとめ

    ぃーーよっしゃぁあ!よくぞここまでたどり着いた。キミのアスレはこの時点ですでにハイクオリティなものに仕上がりつつある。

    ブラボー!

    でも僕らはスクラッチを骨のずいまで楽しみ尽くすと決めたよね!?(決めてない)

    ということでさらなる改善を用意してあるから、じゃんじゃん進めていこう。これ、スクラッチレベルが高くなりすぎてスーパースクラッチャー量産しちゃわない?やっば。日本のScratchレベルをみんなでブチ上げていこうぜ!

    次回はステージをタテ方向にも拡張できるようにしていくぞ!

    え!?なにこれ絶対楽しいやつ!

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

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

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

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

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

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