スクラッチに挑戦している皆さん、どうも!スクラッチコーチです。
質問テンプレート(素早く3回クリックすると全選択できるのでコピーしよう)
・◯◯ ... 記事のどこまで実装が終わったのかを記入しよう。・□□ ... どんな問題が起きているのか、どういうときに起きるのか、具体的に書こう。
・共有済みURL ... たまに共有してない作品URLを書いてる人がいるけど、共有しないとこちらから確認できないからよろしくね。
壁スライドは超かっこいい。でもそれだけじゃ終われない!さらなるゴージャスな機能を追加したい。そう壁スライドからの壁ジャンプだ。ここまできたら商業作品ばりの品質に近づいたと言える。いっしょに見ていこう。
- ① まずはここからレッツゴー!
- ② リファクタリング)ステージをスプライトにしよう
- ③ シーンの切り替えのベース処理
- ④ ヒットボックスを使おう
- ⑤ アニメーションを実装しよう
- ⑥ 絶望の坂道処理を克服する
- ⑦ 長押しで大ジャンプする
- ⑧ 壁をツツ〜っとスライドする
- ⑨ か、壁ジャンプだと!?かっこよすぎるだろ (いまここ)
- ⑩ ステージがヨコにだけ続くと誰が言った?タテ構造
- ⑪ うわ!障害物が行く手をさえぎるぞ
- ⑫ 動く床のギミックを作ろう!
- ⑬ ギミックに乗っているときの衝突処理
- ⑭ オシャレなグラフィックを作るコツ
- ⑮ アイテムをゲットできればゲームに目的ができる!
- ⑯ 重要アイテムがないと開かないドア!?たぎる!
- ⑰ チェックポイントを作って激ムズなアスレを作ろう!
- ⑱ ゲームオーバーを作って緊張感をキープする!
- ⑲ エネミーが現れた!どうすりゃいいのよ!? (12月28日に公開予定)
今回の目標
- 壁スライドしている状態から↑キーを押すと壁ジャンプができるようにする
- 壁ジャンプはタテ方向には連続してできないようにすることで、チート感を防ぎたい
スプライト「プレイヤー」
もちろんプレイヤーだ。プレイヤーを開いておいてほしい。
定義「_上下の動きを処理する」を改修する
↑キーが押されたタイミングで条件ブロックを追加する。
条件式には壁スライドできるかどうか、そしてジャンピングがゼロかどうかを調べる演算を組む。これは、壁スライド中だけどジャンプしてない状態、すなわち壁ジャンプが出来る状態であることを調べるわけだ。
壁ジャンプが出来る状態で↑キーが押されたという条件ブロックの中では、まず変数に値を入れていく。
さらにプレイヤーの向きを反転する。
スピードXに反対方向の力を加える
ジャンプしたらX方向にも飛んでほしいので、スピードXに値を入れる。どんな値を入れればいいだろうか。右向きのときはプラスの力を加えたいし、左向きのときはマイナスの力を加えたい。
回転方向は左右のみだから、右向きなら90度、左向きならマイナス90度のはずだよね。その状態を利用して以下のような演算を組んでみてほしい。
まず向き÷90を作る。
そこに7をかけよう。
こうすることで向いている方向に7の力が加わる。右向きならプラス7、左向きならマイナス7だ。これをスピードXにセットしよう。
壁ジャンプが実現できたかテストする
ふっふー♪あっというまに壁ジャンプが成功したぜ!ここまでしっかり作り込んできたからこそ、こんなに簡単にジャンプを拡張できた。美しいコーディングは管理が楽だからいいね。
チート発見!防止しよう
おっと!喜んでいたらチート機能を見つけてしまった。
これは困るね。今回みたいなアスレで無限にタテ方向の壁ジャンプが出来ると、ゲームが簡単になりすぎてしまう。修正していこう。
変数「ジャンプ中の移動制限」を作る
このチートの原因はジャンプ中でもX方向に動けること。ジャンプしてすぐに壁に戻るようにキー操作して再び壁に張り付いてジャンプする、っていう挙動になってしまうからなんだ。
そこで変数を用意してジャンプ中はX方向に移動できないようにしたい。
定義「_上下の動きを処理する」で値をセットする
これに12という値を入れよう。
12っていうのは、この下で判定で使うんだけど、「どのくらいの時間、X方向への移動を制限したいか」っていう値になるよ。大きくしても小さくしても大丈夫だから、キミのゲームに合わせて調整してみてほしい。小さすぎると無限壁ジャンプチートが成立してしまうから、何度もテストして決めてね。
定義「_左右の動きを処理する」で値をチェックする
最初に条件ブロックを追加する。
ここで変数を調べて、0より大きい状態なら1ずつ減らすようにしよう。
定義「スタートする」で初期化する
もろもろの変数を初期化するようにしよう。
これで壁ジャンプのチートは直った……っと思っていたんだが。
さらなる壁ジャンプのバグを直す
ここからは実は、後日グリフパッチさんによってバグ修正動画が新しく投稿された内容になるよ。わざわざ動画を作ってまで直したかったバグってどんなんだろうか。見てみよう。
あと、この動画はチュートリアルがもっともっと進んでから修正されたんだけど、直すタイミングとしては壁ジャンプを実装したこのタイミングがいいかなと思って、動画の順番とは違うけど今回直してしまおうと思う。
このショート動画を見てほしい。スライドしつつ、→キーを押した瞬間に↑キーを押すことで、タテ方向への壁ジャンプチートが実現してしまっている。これはゲームブレーカーになりうる致命的なチートなので、徹底的に修正しておきたい。
ちなみに壁を上方向にスライドできているのもバグだね(^_^;)
定義「_左右の動きを処理する」を改修する
キーXの値があるとき、つまり←か→キーのどっちかが押されている状態のところに条件ブロックを追加してほしい。
そして次の演算を組んでほしい。
キーX × 90は、右向きなら90だし、左向きならマイナス90になる。それが今向いている「向き」と違うかどうかを調べる条件式を作る。
つまり右向きのときに←を押したり、左向きのときに→を押したケースを調べているよ。
ここで変数「壁スライドできるか」をゼロにして強制的にスライド状態を終わらせる。
こうすることで同じ壁を縦方向にズンズン登っていけるジャンプを防ぐことが出来る。
まとめ
ぃーーよっしゃぁあ!よくぞここまでたどり着いた。キミのアスレはこの時点ですでにハイクオリティなものに仕上がりつつある。
ブラボー!
でも僕らはスクラッチを骨の髄まで楽しみ尽くすと決めたよね!?(決めてない)
ということでさらなる改善を用意してあるから、じゃんじゃん進めていこう。これ、スクラッチレベルが高くなりすぎてスーパースクラッチャー量産しちゃわない?やっば。日本のScratchレベルをみんなでブチ上げていこうぜ!
次回はステージをタテ方向にも拡張できるようにしていくぞ!
え!?なにこれ絶対楽しいやつ!
- ① まずはここからレッツゴー!
- ② リファクタリング)ステージをスプライトにしよう
- ③ シーンの切り替えのベース処理
- ④ ヒットボックスを使おう
- ⑤ アニメーションを実装しよう
- ⑥ 絶望の坂道処理を克服する
- ⑦ 長押しで大ジャンプする
- ⑧ 壁をツツ〜っとスライドする
- ⑨ か、壁ジャンプだと!?かっこよすぎるだろ (いまここ)
- ⑩ ステージがヨコにだけ続くと誰が言った?タテ構造
- ⑪ うわ!障害物が行く手をさえぎるぞ
- ⑫ 動く床のギミックを作ろう!
- ⑬ ギミックに乗っているときの衝突処理
- ⑭ オシャレなグラフィックを作るコツ
- ⑮ アイテムをゲットできればゲームに目的ができる!
- ⑯ 重要アイテムがないと開かないドア!?たぎる!
- ⑰ チェックポイントを作って激ムズなアスレを作ろう!
- ⑱ ゲームオーバーを作って緊張感をキープする!
- ⑲ エネミーが現れた!どうすりゃいいのよ!? (12月28日に公開予定)