スクラッチに挑戦している皆さん、どうも!スクラッチコーチです。
最近のアスレでは壁につかまってスライドする動きもメジャーになってきたよね。なんか見てるとツツ〜ってすべるのがたまらなく気持ちいいんだよなー。なんでだろ。ゼルダの伝説とかでも壁を登るのは常識だし、マリオでも壁につかまったりスライドしたりするのあるし、うん、やっぱり壁につかまる機能は絶対に作りたい!一緒に見てみよう!!
- ① まずはここからレッツゴー!
- ② リファクタリング)ステージをスプライトにしよう
- ③ シーンの切り替えのベース処理
- ④ ヒットボックスを使おう
- ⑤ アニメーションを実装しよう
- ⑥ 絶望の坂道処理を克服する
- ⑦ 長押しで大ジャンプする
- ⑧ 壁をツツ〜っとスライドする (いまここ)
- ⑨ か、壁ジャンプだと!?かっこよすぎるだろ
- ⑩ ステージがヨコにだけ続くと誰が言った?タテ構造
- ⑪ うわ!障害物が行く手をさえぎるぞ
- ⑫ 動く床のギミックを作ろう!
- ⑬ ギミックに乗っているときの衝突処理
- ⑭ オシャレなグラフィックを作るコツ
- ⑮ アイテムをゲットできればゲームに目的ができる!
- ⑯ 重要アイテムがないと開かないドア!?たぎる!
- ⑰ チェックポイントを作って激ムズなアスレを作ろう!
- ⑱ ゲームオーバーを作って緊張感をキープする!
- ⑲ エネミーが現れた!どうすりゃいいのよ!?
- ⑳ エネミーを踏んづけろ!
- ㉑ ギミックのリファクタリング
- ㉒ 回転が切り拓く新境地
今回の目標
今回は壁につかまってスムーズに下降していくスライド処理を作るのが目的だ。
- ジャンプ中(や落下中)に壁に当たったら、つかまって下方にスライドすることが出来るようにする
- 壁に触れた状態で真上にジャンプ(垂直跳び)しても、壁スライドはできないようにする
あたらしいヒットボックスや変数を使うから注意深くみていこう。壁スライドを実装するときは、なれるまでこのチュートリアルを見直すのも効果的だよ。
スプライト「プレイヤー」に壁スライドを追加する
まずはプレイヤーに実装していくぞ。

まんがいちステージに壁がない人も、あとで壁を作る過程があるから大丈夫、そのまま進めよう。
定義「_壁スライドできるか調べる」を作る
調べる系の定義を増やす。

定義「_衝突を判定するX」で実行する

変数「壁スライドできるか」を作る

この変数を使う前に条件ブロックを1つ置いておこう。落下値を見る条件ブロックだ。

落下値が2未満なら壁スライドできないと判定する。つまりジャンプして壁に当たったのではなく、単に走ってて壁に当たったりした場合は、ここで壁スライド出来るか調べる処理は終わり。

壁スライド用の判定ヒットボックスを使う
グリフパッチさんが壁スライドに役立つヒットボックスを用意してくれているので使おう。コスチューム名は「hitbox wallslide」だ。wallslideは壁スライドっていう意味だから、まさに専用ヒットボックスだね。

このさい、回転方法を左右のみにする。

そして定義「_ステージに触れているか調べる」を実行して、結果をそのまま変数「壁スライドできるか」に割り当てる。

最後にコスと回転方法を元に戻そう。

スプライト「ステージ」に壁を増やす
僕はシーン2の階段を全部タテに変えて壁にしたよ。いくつかは空中に浮かぶ壁にしておいた。ここでは垂直な壁を作っておこう。

変数「壁スライドできるか」の値が変わるかテストする
壁に触れながら下降するとゆっくりになる処理を作る
ステージを開いている人は、またプレイヤーを開こう。

定義「_上下の動きを処理する」を改修する
壁スライドできるときにスピードYの値を減らすことでゆっくり下降するモーションを作るよ。
↓ここに条件ブロックを置こう。

この中で再び壁スライドできるかを調べていく。

-
壁に触れた状態でタテにジャンプしたときは壁スライドを発生させないためだよ。
さっき「_衝突を判定するX」で1度「_壁スライドが出来るか調べる」を実行したよね。だから走りジャンプして壁に当たったなら、この段階で変数「壁スライドできるか」には1以上が入っていることになる。
だから走りジャンプのときだけ壁スライドが発生して、垂直跳びではスライドできないようにしているんだ。
ジャンプの上昇中にはスライドさせないようにする
今のままだと壁にジャンプした上昇中のときもスライドが発生してしまう。
そこでジャンプの下降中(または落下中)でないとスライドさせないようにしておきたい。
そのために調べるのはスピードYだよ。

ゆっくりスライドできるかテストする
おっけ!ショート動画では上昇中の様子はわからないけど、気になる人は試してみてね。
斜めの壁にも対応する
少し角度のある壁を作ろう。スプライト「ステージ」を開いて、ちょっとだけ壁をかたむけてみてほしい。

少し押し戻されてしまうことを確認する
この状態でさっきみたいに壁にジャンプしてみよう。するとフワッと少しだけ後ろに押し戻されてしまう様子が見て取れる。
これは今後の処理において望ましくない挙動なんだ。しっかり壁に沿ってスライドするようにしたいから、この段階で挙動を修正しておこうと思う。

原因はプレイヤーのブレーキ処理にある。左右のスピードXが少しずつ減少する処理が、ここではじゃまになっているんだ。
スプライト「プレイヤー」を開き直しておく

定義「_左右の動きを処理する」を改修する
キーが何も押されてないときの処理に追加する。スクショを参考に条件式にAND(かつ)を加えよう。

ここで変数「壁スライドできるか」が1未満かどうか、つまり壁スライド状態ではないことを調べる。

壁に沿ってスライドできるかテストする
よしよし、準備は整ったね。いよいよコスチュームもセットしていこう。
壁スライド用のコスチュームをセットする
壁スライド用のコスチュームもグリフパッチさんが用意してくれているから、ありがたく使わせてもらおう。

定義「_コスチュームをセットする」を改修する
条件ブロックを追加するよ。

壁スライドが出来る状態ならコスを着替えて処理を止めるよ。

壁スライドが完成したかテストする
おおおおおお!これはクールだ!最高だろこれ!
これだけでアスレとしてのクオリティが爆上がりしたって感じない?!
まとめ
今回は壁スライドを実装して最高にクールな挙動をスクラッチキャットに加えることができた!いやぁこれは楽しい。ずっと壁スライドしちゃう。できたことにも感動だし、何回見てもクールなんだよね。これを自分が作ったんだって思ったら、ちょっとワクワクしない?ナイスだよ!!
さぁ、つぎはいよいよ壁ジャンプだ。壁スライド、からのジャンプ!って、おいおい最高かよ!?
- ① まずはここからレッツゴー!
- ② リファクタリング)ステージをスプライトにしよう
- ③ シーンの切り替えのベース処理
- ④ ヒットボックスを使おう
- ⑤ アニメーションを実装しよう
- ⑥ 絶望の坂道処理を克服する
- ⑦ 長押しで大ジャンプする
- ⑧ 壁をツツ〜っとスライドする (いまここ)
- ⑨ か、壁ジャンプだと!?かっこよすぎるだろ
- ⑩ ステージがヨコにだけ続くと誰が言った?タテ構造
- ⑪ うわ!障害物が行く手をさえぎるぞ
- ⑫ 動く床のギミックを作ろう!
- ⑬ ギミックに乗っているときの衝突処理
- ⑭ オシャレなグラフィックを作るコツ
- ⑮ アイテムをゲットできればゲームに目的ができる!
- ⑯ 重要アイテムがないと開かないドア!?たぎる!
- ⑰ チェックポイントを作って激ムズなアスレを作ろう!
- ⑱ ゲームオーバーを作って緊張感をキープする!
- ⑲ エネミーが現れた!どうすりゃいいのよ!?
- ⑳ エネミーを踏んづけろ!
- ㉑ ギミックのリファクタリング
- ㉒ 回転が切り拓く新境地
当連載で取り上げるグリフパッチさんの動画はこちら

質問テンプレート(素早く3回クリックすると全選択できるのでコピーしよう)
・◯◯ ... 記事のどこまで実装が終わったのかを記入しよう。・□□ ... どんな問題が起きているのか、どういうときに起きるのか、具体的に書こう。
・共有済みURL ... たまに共有してない作品URLを書いてる人がいるけど、共有しないとこちらから確認できないからよろしくね。