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

壁ジャンプ|スクラッチでアスレチックゲームの作り方⑨
グリフパッチ(動画)
ok-scratch(解説)

和訳解説は動画作者のグリフパッチさんご本人から許可をいただいて掲載しております。
チャンネルはYOUTUBE ( by griffpatch )からどうぞ。

いよいよ壁ジャンプだ!最高のアスレが今ここに。
スターター
プロジェクト
リミックス用プロジェクトへ
難しさ

任意)自分の作業中のスクラッチ作品URLを記録しておこう!再開するときに便利だよ。

LOADING...

※ この記録は今使ってるPCに保存されます。別のPCで作業するときは表示されません。

スクラッチに挑戦している皆さん、どうも!スクラッチコーチです。

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

今回の目標

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

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

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

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

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

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

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

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

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

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

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

まず向き÷90を作る。

そこに7をかけよう。

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

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

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

チート発見!防止しよう

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

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

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

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

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

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

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

ok-scratch ok-scratch

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

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

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

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

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

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

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

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

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

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

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

ok-scratch ok-scratch

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

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

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

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

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

ok-scratch ok-scratch

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

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

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

まとめ

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

ブラボー!

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

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

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

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

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

完成サンプルがあるよ
おつかれさま!今回のチュートリアルには完成サンプルがあるから、作ってて分からなくなったり、 動作確認をしたいときはチェックしてみてね。
ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!

スクラッチゲーム攻略

スクラッチゲーム

    • 厳選されたスクラッチ人気作品リストがレビュー付きで楽しめます
      趣味に関するスクラッチ作品例
      勉強になるスクラッチ作品