スクラッチでマリオのゲームを作る特大レッスン#05.5 スタックを回避せよ

スクラッチでマリオのゲームを作る特大レッスン#05.5 スタックを回避せよ
ok-scratch
プレイヤーが地面に埋もれたバグを回避する方法が分かります!
難しさ

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

LOADING...

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

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

このスクラッチゲームの作り方への質問もOK このスクラッチゲームの作り方への質問もOK
このスクラッチゲームの作り方に挑戦していて分からないことが発生したら質問してみてね。気づいたタイミングで回答するよ。 質問は 僕のスクラッチのプロフィール で受け付けているよ。

質問テンプレート(素早く3回クリックすると全選択できるのでコピーしよう)

・◯◯ ... 記事のどこまで実装が終わったのかを記入しよう。
・□□ ... どんな問題が起きているのか、どういうときに起きるのか、具体的に書こう。
・共有済みURL ... たまに共有してない作品URLを書いてる人がいるけど、共有しないとこちらから確認できないからよろしくね。

今回のレッスンは、バグ修正用のミニレッスンです。壊れないブロックを叩いた弾みでプレイヤーがシーンにめり込んでしまったり、ジャンプしてブロックに乗ったタイミングで当たり判定エリアの隙間からブロックにめり込んでしまったり、プレイヤーが動けなくなる(スタックする)バグがあるとご報告いただきました。

なんらかの理由でめり込むとプレイヤーはもう動けなくなります。

それを修正するブロック定義を1つ追加します。

ok-scratch ok-scratch

報告してくれたpolandball-gamesさん、ありがとうございます!

準備

このレッスンは前回「スクラッチでマリオゲームの作り方#05 ブロックを壊せ」の続きです。

https://scratch.coach/lesson/mario005/

スクラッチプロジェクトをコピーして保存する

ファイル>コピーを保存する、を選んでプロジェクト名を「マリオプロジェクト005.5 スタックを回避する」としておきます。

プレイヤーをスタックさせない処理を作る

いまのところ、ブロック定義「Y軸に移動する」と「X軸に移動する」のあとは、プレイヤーは障害物に触れていない作りになっています。

そこで今回の作戦は、Y軸とX軸の移動後にも関わらずコスチューム「当たり判定エリア下」が障害物に触れていたらスタック状態であると判断して、プレイヤーのY座標を上方修正してあげる、という感じでいきます!

平たく言えば、埋もれてたら上に引っ張ってあげる、ということです。

ブロック定義「スタックを回避する」を作る

「再描画せずに実行する」オプションにチェックを入れておきます。

移動後かつアニメーション前に実行する

実行する場所が大切です。

レスキューするロジックを作る

移動後とアニメーションの間でスタック状態にあるかを調べてレスキューします。

コスチュームを指定する

コスチューム「当たり判定エリア下」に着替えます。この状態で障害物にめり込んでいるかどうかを調べていきます。

障害物に触れているか調べる

条件分岐ブロックを置く

この条件がTRUEトゥルーなら、それすなわちスタック状態ということです。地面とかブロックにめりこんでプレイヤーが動けず困っている状態です。助けていきましょう。

条件の中にループを置く

10回は暫定ですが、とりあえずOKです。

上に引っ張ってあげる

具体的なレスキュー活動がこれですね。Y座標をプラス1ずつして、障害物がなくなるまで上に引っ張ってあげるイメージです。

十分なところでレスキュー活動を止める

これで終わりでもいいのですが、このままだと必ずプラス10されてしまいます。

たとえばY座標にプラス6だけすれば十分だったのに、プラス10してしまうと、差分である4座標分はプレイヤーが空中に浮いてしまいます。

そうすると、プレイヤーは重力の影響を常に受けているので、4座標分は落下処理が行われてしまいます。

つまり、不自然な動作になるということです。

まだ障害物に触れているか調べる

障害物を抜けたか調べる

抜けていたら止める

動作確認する

マウスを使ってシーンに埋めてみても……。

ピョコンっと地上に引き上げられます。

成功です。

パフォーマンス改善する

しかし、この処理は移動処理と同じように常にチェックが働いています。このレスキュー活動はあくまでイレギュラーな処理なので、頻度は少ないと思います。

そこで、動いているときは処理が走らないようにして、メモリを節約します。

こうすることで一瞬シーンにめり込むことはあっても、すぐに抜け出せるので十分だと思います。

次こそコインをゲットせよ!

急なバグ修正回でしたが、次回こそコインをゲットします!

数日以内に更新しますので、またブクマよろしくお願いします〜。更新しました!

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

スクラッチゲーム攻略

スクラッチゲーム

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