スクラッチでマリオのゲームを作る特大レッスン#12 リスポーンさせる

スクラッチでマリオのゲームを作る特大レッスン#12 リスポーンさせる
ok-scratch
敵モブがスタックしたらリスポーンさせる手順がわかります!
難しさ

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

LOADING...

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

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

てきモブをスタック回避かいひさせる スタックするというのはうごけなくなるとかかたまるという意味いみです。現状げんじょうではてきモブがシーンにうずもれてうごけなくなるバグがあります。 今回こんかいはここにタックルしていきます。 リスポーンする まずはシーンにうずもれたときのレスキューとして、最初さいしょにスポーンした場所ばしょもどしてしまうという方法ほうほう実装じっそうします。 変数へんすう「リスポーンタイマー」をつくうずもれたらすぐにリスポーンさせるのでは、しょっちゅうてきがリスポーンしてしまい、ゲームがむずかしくなってしまいます。 そこでリスポーンタイマーという変数へんすうつくって、なんびょううずもれた状態じょうたいつづいていた場合ばあいだけリスポーンさせるようにしたいとおもいます。 ブロック定義ていぎ「リスポーンする」をつくる オプションにチェックをれます。 みぎに1座標ざひょうズラして障害しょうがいぶつれているか調しらべる すぐに座標ざひょうもど障害しょうがいぶつれていなければタイマーをリセットする わるときはリスポーンタイマーをゼロにもどします。 まだリスポーンタイマーにあたい設定せっていするまえなのでかりにくいですが、このあとすぐにリスポーンタイマーにあたいれるので、とりあえず処理しょりめるときにゼロにもどすという処理しょりれておいてください。 処理しょりめる 障害しょうがいぶつれていなかったので、リスポーンの必要ひつようせいはありません。この場合ばあいはこれでわりです。 おなじことをひだりでも繰り返く かえ座標ざひょうがプラマイぎゃくになっただけで、まったくおな処理しょりです。冗長じょうちょうですがかりやすいのでOKです。 左右さゆう障害しょうがいぶつれていた場合ばあいつく左右さゆうなんかにはさまった状態じょうたいであると解釈かいしゃくして、タイマーをセットします。このタイマーで一定いってい時間じかん経過けいかしたらリスポーンの必要ひつようがあります。 タイマーというあたいはブロックパレットの「調しらべる」にあります。 タイマーをセットしたらいったん処理しょりめてOKです。 また、スクショではログをいておきました。なぜタイマーをセットするのか、その理由りゆういておきました。 一定いってい時間じかんたったか様子ようすをする タイマーをセットしたあともなおスタック状態じょうたいつづいているかを調しらべます。 ステップ1 タイマーからリスポーンタイマーのあたいいています。 数字すうじ解説かいせつします。 タイマーには現在げんざい時刻じこくはいっています。 リスポーンタイマーには一瞬いっしゅんまえ時刻じこくはいっています。 そして、いま時間じかんから一瞬いっしゅんまえ時間じかんくと「なんびょうったか」という差分さぶんかるのです。 ステップ2 差分さぶんが3びょうよりもおおきいかどうかを判断はんだんするしきです。 3びょうはこの段階だんかいでは適当てきとうです。おそらく0.6びょうくらいがいいかなとおもいます。 ステップ3 条件じょうけん分岐ぶんきブロックを追加ついかします。 またログをいておきました。 このブロック定義ていぎは、かく条件じょうけんがNOであるとスクリプトをめる構造こうぞうなので、ブツブツれているようなつくりになっています。こういう構造こうぞうはログがないとかりづらいので、こまめにログをいてあります。 リスポーン処理しょりをする これがリスポーンの本質ほんしつてき処理しょりです。変数へんすう初期しょきみかどうか」を1から0にもどしてから自分じぶんのクローンをつくり、自分じぶん自身じしんしています。 こうするとまた最初さいしょのスタンバイ状態じょうたいもどります。 ブロック定義ていぎ全体ぜんたい確認かくにんする 動作どうさ確認かくにんする うずもれを修正しゅうせいする(スペースをさがす) リスポーンに成功せいこうしました。しかし、スタックしたらリスポーンではなく、まずはうずもれた状態じょうたい改善かいぜんできないかどうかをこころみたいとおもいます。 プレイヤーのときにうずもれてしまったプレイヤーをレスキューするロジックをつくりました。 https://scratch.coach/lesson/mario5-5/ てきモブでもおなじようにうずもれ修正しゅうせいおこないます。それでもダメならリスポーンするというながれにします。 作戦さくせんとしては、てきモブを上下じょうげ左右さゆうなん座標ざひょううごかしてみて、一番いちばんちかくのスペースをさがします。そしてつかったスペースにてきモブをワープさせるというかんじです。 まずはスペースをさがすロジックをつくります。 ブロック定義ていぎうずもれ修正しゅうせいする」をつくる オプションにチェックをれます。 利用りようする リスポーンの処理しょりととのえておく うずもれ修正しゅうせいにリスポーンする部分ぶぶんすこ変更へんこうします。 ブロック定義ていぎうずもれ修正しゅうせいする」の直後ちょくごに、障害しょうがいぶつれているかどうかを判定はんていします。 れていなければうずもれ修正しゅうせいできたということです。 リスポーンタイマーをリセットしてスクリプトをめます。 また、ログも修正しゅうせいしてあります。 ログを追加ついかする リスポーンのところにもログをっておくとかりやすいです。 回転かいてん方法ほうほう自由じゆうにする てきモブを上下じょうげ左右さゆうにずらしていく前提ぜんていとして、処理しょり効率こうりつするために回転かいてん自由じゆう回転かいてんにしておきます。 こうするとうえけたりしたけたり出来できます。 それがどう効率こうりつにつながるのか、予想よそうできますか? こたえはもうすぐです! 90からスタートする 変数へんすううずもれ修正しゅうせい」をつく初期しょきする 30かい繰り返く かえす 30というのはまだ適当てきとうです。なん座標ざひょうまでうずもれ修正しゅうせいこころみるか、適切てきせつ数値すうち調整ちょうせいしながらつけてください。 あまりおおきな数値すうちにすると、うずもれ修正しゅうせいのレベルを逸脱いつだつしてしまいます。調整ちょうせいするさいは、そのあたりのバランスをかんがえながら調整ちょうせいします。 うずもれ修正しゅうせいを1ずつやす てきモブの位置いちをずらす 障害しょうがいぶつれているか調しらべる 本質ほんしつてき処理しょりを……後回あとまわしにする ここでうずもれを修正しゅうせいする本質ほんしつてき処理しょりおこなうのですが、そのまえにスペースをさが処理しょりわらせてしまいます。 てきモブの位置いちもどす ここに処理しょりるということは、まだ障害しょうがいぶつれていたということです。そのためつぎ位置いちにチェックをうつしていきます。 いまは90きで1座標ざひょうズラしてチェックしましたね。 つぎのチェックのために、いったん1座標ざひょうぶんもどしておきます。 そしてつぎは180けて1座標ざひょうズラしてチェックします。 それでもダメならつぎは270。 それでもダメならつぎは360。 それでもダメなら上下じょうげ左右さゆうの1座標ざひょうすべ障害しょうがいぶつ存在そんざいしているということです。 これであきらめずにつぎは2座標ざひょうずつズラしていきます。 これを30座標ざひょうになるまでつづけます。 また、1座標ざひょうごとに4つの角度かくど(90, 180, 270, 360)をチェックしていくので、もう1つループを追加ついかしていきます。 4かい繰り返く かえきをえる 回転かいてん方法ほうほう左右さゆうもど処理しょりわったら回転かいてん方法ほうほうもともどしておきます。 うずもれ修正しゅうせいする(本質ほんしつてき処理しょり) TODOとしておいた部分ぶぶん取り掛かとりかかります。ここはスペースがつかった場合ばあい処理しょりです。 回転かいてん方法ほうほうもともどきをもともどす Yじくうずもれを修正しゅうせいした場合ばあいはこれでもいいのですが、Xじく移動いどうした場合ばあいはもうワンステップ必要ひつようです。 横向よこむきかどうかを判定はんていする 横向よこむきならXじくうずもれ解消かいしょうすることを意味いみします。 変数へんすう移動いどう距離きょりX」にうずもれ修正しゅうせい追加ついかする なぜ横向よこむきの場合ばあいだけこのような処置しょち必要ひつようなのでしょうか。 Yじくであれば、素直すなおにY座標ざひょう指定していしているだけなのでとく問題もんだいはないのですが、Xじくへの移動いどうには変数へんすう「★カメラのX座標ざひょう」や変数へんすう「スポーンするX座標ざひょう」などを加味かみした複雑ふくざつ演算えんざん使つかっています。 その演算えんざんなかで、スポーン地点ちてんからどのくらいすすんだかという判定はんてい変数へんすう移動いどう距離きょりX」を使つかっています。 このあたいえないと、せっかくうずもれを修正しゅうせいしてスペースにワープさせても、つぎ瞬間しゅんかんにはまたスポーン地点ちてんから変数へんすう移動いどう距離きょりX」ぶんだけすすんでしまい、またまたスタックしてしまいます。 そのため、Xじくうずもれを解消かいしょうした場合ばあいは、変数へんすう移動いどう距離きょりX」のあたい変数へんすううずもれを修正しゅうせい」のぶんだけ修正しゅうせいしてげる必要ひつようがあるのです。 動作どうさ確認かくにんする 完成かんせいです!うずもれてもピョコっとがってきます。ずっとうずもれてたらリスポーンしてくれます。 プレイヤーを調整ちょうせいしたら土台どだい完成かんせいながみちのりでした。 あとはちょっと調整ちょうせいします。 そうしたらいったん完成かんせいです。 そのあとはマリオらしいてきモブをつくったり、コースをかんがえたり、ワクワクを盛り込も こみまくりましょう。
ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!

スクラッチプログラミングのゲーム攻略

スクラッチプログラミングのゲーム

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