スクラッチでマリオのゲームを作る特大レッスン#04 ゴールして次へ

スクラッチでマリオのゲームを作る特大レッスン#04 ゴールして次へ
ok-scratch
横スクロールゲームで、プレイヤー以外のスプライトを動かす基本がわかります。
難しさ

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

LOADING...

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

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

準備じゅんび このレッスンはマリオをつくるシリーズの4レッスンです。前回ぜんかいレッスンをやってないほうはチェックしてみてください。 「スクラッチでマリオ」シリーズの最終さいしゅうゴールをチェック 最後さいごまでレッスンをすすめるとこのようなマリオゲームの土台どだいとなるプロジェクトが完成かんせいする予定よていです。 とうレッスンの完成かんせいひん確認かくにんする 画質がしつあらいですが、ゴールのはたにプレイヤーがれるとつぎのレベルがはじまって、最後さいごはクリアという文字もじ部分ぶぶん注目ちゅうもくしてください。 かくレベルによってシーンがちがてんも、カンタンに管理かんりできる仕組しくみを紹介しょうかいします! また、今回こんかいからメッセージを多用たようはじめます。メッセージはプロジェクトが複雑ふくざつする要因よういんの1つです。これを上手じょうず把握はあくする方法ほうほう紹介しょうかいします。 スクラッチプロジェクトをコピーして保存ほぞんする ファイル>コピーを保存ほぞんする、をえらんでプロジェクトめいを「マリオプロジェクト004 ゴール」としておきます。 バグ修正しゅうせいからスタート バグではないのですが、バグの温床おんしょうになりそうな部分ぶぶんがあるので、この段階だんかいなおしておきます。スクラッチはプロジェクトをつくまえ完璧かんぺき設計せっけいしてミスなく作り上つく あげる、というプロセスを必要ひつようはありません。仕事しごとではありませんから、気楽きらくにコーディングしてがついたタイミングでなおせばいいのです。 プレイヤーのジャンプりょく変数へんすうしておく マジックナンバーは極力きょくりょくらしたいので、ジャンプりょくである10を変数へんすうにしておきます。 変数へんすう「ジャンプりょく」をつくる プレイヤーのスプライトにつくります。 初期しょきする はたがおされたときに10になるように初期しょきしておきます。 じょうキーがされたときに変数へんすう「スピードY」に変数へんすう「ジャンプりょく」をれます。 ステージをレベルに改名かいめいする ステージ、というスプライトをつくっていましたが、背景はいけいのこともステージとぶのでまぎらわしいですね。背景はいけい名前なまええることはできませんので、スプライトをレベルにえます。 プレイヤーの変数へんすう「ステージにれているかどうか」を改名かいめいする ステージにれているかどうか、という変数へんすうは「シーンにれているかどうか」に改名かいめいします。レベルにれているかどうか、だとかりづらいので具体ぐたいてきに「シーン」としました。 プレイヤーのブロック定義ていぎ「ステージにれているか調しらべる」を改名かいめいする おなじくブロック定義ていぎもシーンでなおしておきます。 ログやメモも適宜てきぎ修正しゅうせいする ログやメモなのでロジックには関係かんけいありませんが、ステージという名称めいしょう使つかっていた箇所かしょをレベルまたはシーンで修正しゅうせいしておきます。 変数へんすう「★カメラのX座標ざひょう」にはいあたい逆向ぎゃくむきにする いまみぎすすむと変数へんすう「★カメラのX座標ざひょう」にマイナスのあたいはいります。前提ぜんていとしてみぎよこスクロールしていくので、みぎがプラスのほうが直感ちょっかんてきです。直感ちょっかんてきかどうかは重要じゅうようなので、このタイミングでここも修正しゅうせいします。 プレイヤーの変数へんすう「スピードX」への加算かさん処理しょりぎゃくにする 直接ちょくせつ★カメラのX座標ざひょう修正しゅうせいするのではなく、変数へんすう「スピードX」への加算かさん処理しょりえます。まぎらわしいのでBeforeとAfterのスクショを掲載けいさいしておきます。 修正しゅうせいまえ 修正しゅうせい うえのスクショ部分ぶぶんを、こうなおしてください。 • みぎしたら変数へんすう「スピードX」に変数へんすう加速かそくりょく」、つまりみぎでプラスのあたいはいります。 • ひだりしたら変数へんすう「スピードX」に「0 - 加速かそくりょく」、つまりひだりでマイナスのあたいはいります。 レベルのスプライトのX座標ざひょう代入だいにゅうするしきえる わせてレベル(もとステージ)スプライトのクローンされたときの挙動きょどうえます。X座標ざひょうはいあたい逆向ぎゃくむきにします。 ここではゼロからマイナスするかたちぎゃくにしていますが、-1をける方法ほうほうでもかまいません。 重力じゅうりょく初期しょきをレベルのスプライトにうつす いまはプレイヤーのスプライトで重力じゅうりょく初期しょきおこなっています。しかし、重力じゅうりょくをプレイヤーで初期しょきするのは違和いわかんがあります。重力じゅうりょく管理かんりするのはステージかレベルのどちらかがいでしょう。 今回こんかいはレベルに管理かんりしてもらいます。予定よていはありませんが、ひょっとしたら月面げつめんシーンや水中すいちゅうシーンのように重力じゅうりょく法則ほうそくえる必要ひつようがあるかもしれないからです。 プレイヤーのスプライトからは重力じゅうりょく初期しょき部分ぶぶんしておいてください。 動作どうさ確認かくにんする これでバグ修正しゅうせいわりです。 挙動きょどうわりがないかチェックしておきましょう。 ゴールのスプライトをつくる ゴールは独特どくとく振る舞ふ まいをするので、シーンの一部いちぶとはせず、スプライトしておきます。 コスチュームをえがく ゴールっぽいコスチュームをえがきます。 マリオっぽくはたをゴールに見立みたててみました。この段階だんかいいろやサイズやデザインにはまったくこだわりません。はたのコスチュームをえがくのがむずかしければ、ただのふとぼうでも、いったんOKです。 スプライトめいをゴールにする とりあえずの処理しょりつくはた挙動きょどうはもうすこしあとでちゃんと作り込つく こみますが、いったんカンタンな処理しょりだけいておきます。 画面がめん右端みぎはしから近寄ちかよってくるような挙動きょどうにする 240が画面がめん右端みぎはしあらわしています。そこにカメラの座標ざひょうをマイナスすることで、プレイヤーがあるくごとにはたちかづくような視覚しかく効果こうかられます。 動作どうさ確認かくにんする 数字すうじ説明せつめいもしておきます。 変数へんすう「★カメラのX座標ざひょう」は最初さいしょゼロです。なのでゴールは「240 - 0 = 240」の位置いち、つまり画面がめん右端みぎはしにあります。 そして、さきほどプレイヤーがみぎあるくと変数へんすう「★カメラのX座標ざひょう」にはプラスのあたいはいるように修正しゅうせいしました。つまり、みぎに10あるけば★カメラのX座標ざひょうあたいはプラス10です。 このとき、はたは「240 - 10 = 230」の位置いち移動いどうしています。 このように、プレイヤーがみぎあるけばあるくほどはたは220、210……20, 10, 0とプレイヤーに近寄ちかよってきます。視覚しかくてきにはプレイヤーがあるいてはた近寄ちかよっているようにえるはずです。 このかんがかた今後こんごてきモブやブロックを実装じっそうするさいにも使つかうことになります。 プレイヤーにれたらゴールとみなす 本家ほんけマリオでも、マリオがはたびつくとゴールになりますね。ここでもプレイヤーがはしれたらゴールとします。 メッセージ「ゴールしました」をつくる ゴールしたらほかのスプライトにもそのことをつたえて、諸々もろもろ処理しょりをするようにつくるので、メッセージを使つかいます。 ゴールしたらメッセージをおくり、スクリプトをめる メッセージをおくったあとはゴールのスクリプトはめます。ゴールの処理しょりはまたあとで修正しゅうせいしますので、とりあえずこれでOKです。 背景はいけい「ステージ」にゴールの処理しょりく スプライトではなく、ステージにゴール処理しょりきます。ステージにはどんな処理しょりくか、厳密げんみつなルールはありませんが、ぼく場合ばあいはゴールのメッセージや背景はいけい音楽おんがくのコントロールなど、あえて専用せんようのスプライトを用意よういするまでもない共通きょうつう処理しょりをよくきます。 おとはとりあえず適当てきとうにWinというおとえらびました。 そのしたにブロック定義ていぎ「メモ」を使つかって、後日ごじつゴールの処理しょりにこだわりたくなったら追加ついかしていくむねいておきました。 メッセージ「つぎのレベルにすすんでください」をつく送信そうしんする いまはゴール処理しょりはなにもしませんが、本来ほんらいはこのタイミングでコイン枚数まいすう確認かくにんしたり花火はなび打ち上う あげたりしたいです。そして一連いちれんのゴール処理しょりわったら、つぎのレベルにすすむというながれです。 そのため、メッセージを送信そうしんするブロックだけいまいておきます。 レベルによってシーンをける 簡易かんいばんゴールができたので、いよいよレベルに着手ちゃくしゅします。 ゴールしたらレベル1からレベル2に切り替き かわる処理しょりです。 現在げんざい、レベルにはシーン1,2,3というコスチュームがあります。このままシーン4,5,6,,,と追加ついかするだけでは、どのシーンがなんレベルのときに表示ひょうじされるべきかかりません。 そこで命名めいめい規則きそくによってレベルとシーンを関連かんれんける作戦さくせんきます。これは実際じっさいのシステム開発かいはつなどでもよく使つかわれる作戦さくせんです。 レベルで「つぎのレベルにすすんでください」を受け取う とる まずはレベルでメッセージ「つぎのレベルにすすんでください」を受け取う とったら初期しょきはじまるようにします。 移動いどうまえ 移動いどう はたがおされたときに、メッセージ「つぎのレベルにすすんでください」をおくるようにしておきます。これがないとなんはじまりません。 レベルのコスチュームめいえる 命名めいめい規則きそくえていきます。 まずすでにあるコスチュームめいを「レベル1_シーン1」「レベル1_シーン2」「レベル1_シーン3」とえます。 そして、どれでもいいのでコスチュームを複製ふくせいして「レベル2_シーン1」という名前なまえにします。レベル2_シーン2までつくっておいてください。たいらでもOKです。 変数へんすう「★いまのレベル」をつく初期しょきする つぎのレベルにすすむタイミングでプラス1する これではたしたタイミングではゼロに初期しょきされますが、すぐにレベル1になります。 コスチュームめいをレベルにおうじてえる 「りんごとばなな」ブロックを2つ組み合く あわせることで、「レベル○_シーン1」というコスチュームに着替きがえます。 変数へんすう「★いまのレベルのシーン合計ごうけいすう」をつくいまは「処理しょりを3かい繰り返く かえす」というループを使つかっていますが、3かいかどうかはレベルによってわります。条件じょうけんブロック「もし〜なら」を使つかって、レベル1なら3かい、レベル2なら2かい、と直接ちょくせつ方法ほうほうでもOKですが、今回こんかい変数へんすう駆使くしして自動じどうでシーンすう計算けいさんします。そのための変数へんすうがこれです。 初期しょきする レベルがわるたびにゼロにもどします。 該当がいとうするコスチュームすうかぞえる すこし複雑ふくざつです。 「○に○がふくまれる」ブロックをく まずはこれをいてください。 「りんご」を「コスチュームの名前なまえ」にえる つぎに「りんご」のところに「コスチュームの名前なまえ」をれます。 コスチュームの「名前なまえ」の部分ぶぶんは、デフォルトでは「番号ばんごう」になっているかもしれません。クリックすれば「名前なまえ」にえられます。 「り」をいったん「りんごとばなな」にえる りんごを「レベル」に、バナナを変数へんすう「★いまのレベル」にえる 「ではない」ブロックに入れ込い こむ これで「コスチュームの名前なまえにレベル1がふくまれてない」という意味いみ完成かんせいしました。 「まで繰り返く かえす」ブロックに入れ込い こむ これで、 「コスチュームの名前なまえにレベル1がふくまれなくなるまでずっと繰り返く かえす」 い換いかえれば 「コスチュームの名前なまえにレベル1がふくまれているあいだはずっと繰り返く かえす」 というループができました。 つぎのコスチュームにする ループのなかに「つぎのコスチュームにする」ブロックをきます。 シーン合計ごうけいすうをカウントアップする ループの一番いちばん最初さいしょ変数へんすう「★いまのレベルのシーン合計ごうけいすう」をプラス1します。これがレベルごとにコスチュームすうかぞえる本質ほんしつてき処理しょりになうブロックです。 3かい繰り返く かえすループと置き換お かえる ながれを解説かいせつします このループにはいまえに「レベル1_シーン1」に着替きがえているので、ループ条件じょうけんである「コスチュームの名前なまえにレベル1がふくまれている」はクリアできるので変数へんすう「★いまのレベルのシーン合計ごうけいすう」のあたいは「 0 + 1 = 1 」になります。 そしてつぎのコスチュームに着替きがえるので、「レベル1_シーン2」になります。これもレベル1という文字もじふくまれているので、変数へんすう「★いまのレベルのシーン合計ごうけいすう」は「 1 + 1 = 2 」になります。 そのあとにまた着替きがえて「レベル1_シーン3」になります。これもOKなので変数へんすう「★いまのレベルのシーン合計ごうけいすう」は「 2 + 1 = 3 」になります。 さらに着替きがえます。すると今度こんどは「レベル2_シーン1」になります。このコスチュームめいには「レベル1」はふくまれていません。だからループはわります。 結果けっかとして変数へんすう「★いまのレベルのシーン合計ごうけいすう」のあたいは3でわります。レベル1のシーンすうは3なので、ただしいですね! コスチュームをもともどす まだレベルの初期しょき処理しょりつづくので、コスチュームをシーン1にもどしておきます。 自分じぶんのクローンをつくるループをく もともとあった「3かい自分じぶんのクローンをつくる」ループとおなじことをします。ただし回数かいすう変数へんすう「★いまのレベルのシーン合計ごうけいすう」です。 メッセージ「レベルの初期しょきわりました」をつくおくる これでレベルの初期しょきわりました。 レベルの初期しょきわったことをほかのスプライトにおらせして、それぞれのうごきを開始かいししてもらいます。 動作どうさ確認かくにんする これでうごかしてみてください。おかしいことがきたひともいるとおもいます。 おそらくただしくレベル2のシーンが表示ひょうじされなかったのではないでしょうか。 じつはまだりません。 いまのままうごかすと、レベル1のシーンはただしく表示ひょうじされるのですが、つぎのレベルにすすめません。 その理由りゆうは、変数へんすう「★いまのレベル」です。1のつぎは2になってほしいですが、5になってしまっています。 なぜこうなるか予想よそうがつくでしょうか。 こたえは、クローンです。 レベルではクローンをつくってかくシーンを生成せいせいしています。レベル1のシーンは3つあるので、クローンも3つできています。 そしてクローンたちもメッセージ「つぎのレベルにすすんでください」を受け取う とってレベルの初期しょき処理しょりはじめてしまうのです。するとどうなるでしょうか。 • スプライト本体ほんたい変数へんすう「★いまのレベル」にプラス1します。 • クローン1も変数へんすう「★いまのレベル」にプラス1します。 • クローン2も変数へんすう「★いまのレベル」にプラス1します。 • クローン3も変数へんすう「★いまのレベル」にプラス1します。 まとめると「 1 + 4 」で5になってしまうのです。 解決かいけつさくとして、初期しょき処理しょりをスプライト本体ほんたいだけにおこなわせればOKです。 フラグを使つかって解決かいけつする作戦さくせんきます。 変数へんすう「クローンかどうか」をつくる レベルに変数へんすう追加ついかします。 本体ほんたいよう初期しょきをする スプライト本体ほんたいは、変数へんすう「クローンかどうか」に否定ひてい意味いみでゼロをたせます。 クローンよう初期しょきをする たいしてクローンがわでは肯定こうてい意味いみで1をたせます。 初期しょき処理しょり条件じょうけん分岐ぶんき追加ついかする 本体ほんたいなら初期しょき処理しょりおこない、クローンならクローンを削除さくじょしてもらいます。 動作どうさ確認かくにんする これでただしくレベル2にすすめるとおもいます。ためしてみてください。 また、ここまでの実装じっそうでレベルの追加ついか簡単かんたんにできるようになりました。コスチュームをつくって「レベル○_シーン○」という命名めいめい規則きそくとおりの名前なまえにしてあげればいいだけです。 レベルの初期しょきわったあとの処理しょり プレイヤーやゴールのスプライトにうごいてもらいます。 プレイヤーのスプライトの初期しょきおこなはたがおされたタイミングで初期しょきしていましたが、これからはメッセージ「レベルの初期しょきわりました」を受け取う とったときに初期しょきするようにえます。 こんなかんじです。↓ メッセージ「ゴールしました」を受け取う とったらプレイヤーをめる ゴールしてからつぎのレベルがはじまるまでは、プレイヤーにはうごいてほしくないので、このタイミングでプレイヤーをめます。 これをさっきゴールをつくったときではなくいま追加ついかした理由りゆうは、初期しょき処理しょりがメッセージ「レベルの初期しょきわりました」をトリガーにして実行じっこうされるようになったからです。 はたがおされたタイミングで初期しょきされていたころでは、うっかりプレイヤーのうごきをめるとゲームがスタックしてうごかなくなります。 いまなら、レベルの初期しょきのたびにプレイヤーのうごきは再開さいかいされるので、安心あんしんしてめることができるようになったのです。 かくす・表示ひょうじする処理しょり追加ついかする レベルの初期しょきわるまではプレイヤーにはいちかくれてもらおうとおもうので、このタイミングでかくす・表示ひょうじするブロックも追加ついかしておきます。 ゴールのスプライト ゴールしたらかくす ゴールしたらいちかくれるようにしておきます。 メッセージ「レベルの初期しょきわりました」を受け取う と表示ひょうじする レベルの初期しょきわり、かくシーンが所定しょてい座標ざひょう配置はいちされたら表示ひょうじします。 表示ひょうじ処理しょりうつはたがおされたタイミングでっている処理しょりを、かくレベルの初期しょきわったタイミングで実行じっこうされるように変更へんこうします。 動作どうさ確認かくにんする 動作どうさ確認かくにんするとレベルは順調じゅんちょうわるのですが、レベル3はまだつくっていないため、挙動きょどうがおかしくなります。 この原因げんいんは、シーンの合計ごうけいすうをカウントしているところできています。 現在げんざいつくりだと、コスチュームめいを「レベル3_シーン1」にえてからシーンのかずをカウントしていますが、そんなコスチュームは用意よういしていないので合計ごうけいすうはゼロです。 するとレベルのクローンが1つもつくられないため、地面じめんがなくなってプレイヤーは落下らっかしてしまいます。 ぜんクリアをつくる そこで、シーンの合計ごうけいすうがゼロだったら、それはもう全面ぜんめんクリアしたとみなします。 条件じょうけんブロックを追加ついかする シーンの合計ごうけいすうをカウントしわった直後ちょくごに、「もし」ブロックを追加ついかします。 条件じょうけんは、変数へんすう「★いまのレベルのシーン合計ごうけいすう」がゼロだった場合ばあい、です。 メッセージ「ぜんクリアしました」をつくおくってめる メッセージをおくり、そのあと処理しょりめます。シーンの合計ごうけいすうがゼロなのでこのあとの処理しょり必要ひつようありません。 ステージにぜんクリア処理しょり記述きじゅつする ステージ(背景はいけい)にぜんクリアしたときの処理しょりいておきます。ちょうどゴールしたときの処理しょりいたのとおなじです。 ステージに背景はいけい追加ついかする 非常ひじょうにカンタンですが、クリアの処理しょり追加ついかしておきます。 ステージに「クリア」という背景はいけい追加ついかします。 ぜんクリアしたら背景はいけいをクリアにえる ステージの背景はいけい初期しょきする プレイヤーをかくぜんクリアしたらとりあえずプレイヤーはかくしておきましょう。 プレイヤーのスプライトにこちらを追加ついかしてください。 これでぜんクリア処理しょりはいったん終了しゅうりょうにします。いまはクリアしたことが最低さいていげんわかればOKです。 つぎはゴールのスプライトを洗練せんれんしていきますが、ゴールのスプライトにはいまえいちてん修正しゅうせいがあります。 ローカル変数へんすうをグローバルする 最初さいしょのレッスンで変数へんすう「1シーンの横幅よこはば」をつくりましたが、これはレベルのスプライトにつくったローカル変数へんすう(このスプライトのみ、の変数へんすう)でした。 しかし、やはりこれはのスプライトからも参照さんしょうしたいので「すべてのスプライトよう変数へんすう(グローバル変数へんすう)にしたいと発覚はっかくしました。 変数へんすう「1シーンの横幅よこはば」をグローバルする 残念ざんねんながらスクラッチではローカル変数へんすうをグローバル変数へんすう変更へんこうはできません。 ですが、この作業さぎょう(グローバル勝手かって命名めいめいしてます)はまぁまぁ発生はっせいします。 完璧かんぺき設計せっけいをしてから作り込つく こむ、という手順てじゅんんでいるひとすくないので(たぶん)、よくあることだとえます。 そこで地道じみちにチェックしながら変更へんこうします。変数へんすうのグローバルにはコツがあるので一緒いっしょにご紹介しょうかいします。 まず既存きそん変数へんすうがどこで使つかわれているか把握はあくする いまあるローカル変数へんすう「1シーンの横幅よこはば」がどこで、なん箇所かしょ使つかわれているかを把握はあくします。 直接ちょくせつ目視もくしで1つずつチェックする方法ほうほう王道おうどうですが、ブラウザの検索けんさく機能きのう使つかうともうすこしスムーズにできます。 ブラウザごとにやりかたちがうかもしれませんが、メジャーな方法ほうほうせておきます。 スクラッチのエディタで検索けんさくしたいスプライト(いまならレベル)のコードがえる状態じょうたいつぎのとおりにします。 • Windowsなら、Ctrlキー《コントロールキー》とFキー《エフキー》をす • Macなら、Commandキー《コマンドキー》とFキー《エフキー》をす そうすると画面がめん右上みぎうえなどに検索けんさくまど表示ひょうじされます。 そこに「1シーンの横幅よこはば」と入力にゅうりょくしてください。するとページないの「1シーンの横幅よこはば」という文字もじがハイライトされます。 ハイライトされた箇所かしょえないというひとは、手動しゅどうでスクロールしてハイライトされている文字もじさがしてください。 使用しよう箇所かしょが3箇所かしょあると検索けんさくまど右側みぎがわいてあります。1つはブロックパレット(左側ひだりがわのサイドバー)ないのブロックのことなので、実質じっしつ2箇所かしょ使つかわれていることがかりました。 あたらしいグローバル変数へんすうつく使つかわれている場所ばしょ把握はあくしたら、あらたに変数へんすう「★1シーンの横幅よこはば」をつくります。 変数へんすう使用しよう箇所かしょみぎクリックする 変数へんすう置き換お かえていきます。 しかし「ふる変数へんすうしたり、ブロックからはずして置き換お かえる」のは悪手あくしゅです。 変更へんこうするときはみぎクリックを使つかいます。 みぎクリックすると変数へんすう変更へんこうできます。 初期しょきしているところもえる ここは普通ふつうにクリックして変更へんこうします。 これでグローバル終了しゅうりょうです。もともとこのスプライト専用せんよう変数へんすうだったので、のスプライトで使つかわれている箇所かしょさがすといった複雑ふくざつ作業さぎょうりません。 グローバルのコツ コツをまとめておきます。 1. ブラウザの検索けんさく機能きのうきゅう変数へんすうがどこで使つかわれているか把握はあくする 2. 変数へんすう使用しよう箇所かしょえるときは、かならみぎクリックでえる 3. 初期しょきしている箇所かしょは、普通ふつうにクリックして選択せんたくからえる これをまもるだけでもかなりグローバルがスムーズにおこなえます。 あらためてゴールのスプライトに着手ちゃくしゅします。 ゴールのスプライトを改善かいぜんする ゴールのスプライトは、やっつけ仕事しごとつくったものなので洗練せんれんします。 そもそも現状げんじょうではゴールがいきなりシーン1にえていますが、ゴールはかなら最終さいしゅうシーンに登場とうじょうするようにしたいです。 最終さいしゅうシーンというのはレベルによってなんばんわりますが、変数へんすう「★いまのレベルのシーン合計ごうけいすう」を使つかえばかりますね。 ということでここで作り込つく こむゴールの仕様しようは、つぎとおりでいきます。 • 毎回まいかいかなら最終さいしゅうシーンにスポーンする • ゴールがえる位置いちまでプレイヤー(カメラ)がうごかないと、かくれたまま • える位置いちたら表示ひょうじする • ふたたえない位置いち移動いどうしたらかくす プレイヤーがれたらゴールとみなすところは据え置す おきです。 表示ひょうじかくすブロックを追加ついかする 追加ついかまえ 追加ついか 表示ひょうじする条件じょうけんぶん作り込つく こまえ変数へんすうあらたにつくります。 ここではゴールを表示ひょうじする演算えんざん簡略かんりゃくするために、つぎの3つの変数へんすう駆使くししたいとおもいます。 • スポーンするシーンのX座標ざひょう画面がめん右端みぎはしからの座標ざひょう • スポーンするX座標ざひょう 変数へんすう「スポーンするシーンのX座標ざひょう」をつく初期しょきようのブロックをく いったんこのようにいてください。 そしてしきてはめていきます。 最終さいしゅうシーンのかずから1をいたブロックを用意よういする 1シーンの横幅よこはばける 1シーンの横幅よこはばかりに540で統一とういつされていて、合計ごうけい3シーンあるなら、「 540 * ( 3 - 1 ) 」というしきができます。 初期しょきする 変数へんすう「スポーンするシーンのX座標ざひょう」のあたいを、作成さくせいしたしき初期しょきします。 このしきについてはすこ解説かいせつしておきます。 まずここでやりたいことは、ゴールがスポーンするべき最終さいしゅうシーンのX座標ざひょう割り出わ だすことです。そこでグローバル変数へんすうである「★1シーンの横幅よこはば」にシーンのかずけてX座標ざひょう割り出わ だしています。 そこまでは大丈夫だいじょうぶでしょうか。 問題もんだいは、なぜシーンの合計ごうけいすうからマイナス1しているのかというてんです。なにか予想よそうはつきますか? こたえは、変数へんすう「★カメラのX座標ざひょう」にあります。★カメラのX座標ざひょう最初さいしょゼロですよね。しかし、★カメラの変数へんすうがゼロの場所ばしょは1シーン中央ちゅうおうなのです。 1シーンが540座標ざひょうなので、その中心ちゅうしんである270座標ざひょうが★カメラのX座標ざひょうのゼロ地点ちてんになっています。 最終さいしゅうシーンについても、最終さいしゅうシーンの中央ちゅうおうよりもさきにプレイヤー(カメラ)がすすんでしまうと、画面がめん右端みぎはし空白くうはく表示ひょうじされることになります。 この空白くうはくせたくないので、最終さいしゅうシーンの最終さいしゅう座標ざひょうおなじく中心ちゅうしんてんさだめる必要ひつようがあります。そうするとここでもマイナス270することになります。 1シーン中心ちゅうしん地点ちてんまでの270座標ざひょうと、最終さいしゅうシーンの中心ちゅうしんてん以降いこうの270座標ざひょうをプラスするとちょうど1シーンの横幅よこはばおなあたいになります。そのためシーンの合計ごうけいすうからマイナス1すると都合つごうよく計算けいさんがうまくいくのです。 うごくものをないとピンとこないかもしれませんので、なやみすぎずにさきすすみましょう。 変数へんすう画面がめん右端みぎはしからのX座標ざひょう」をつくつぎは、ゴールがスポーンする位置いち画面がめん右端みぎはしからなん座標ざひょうにするかをあらわ変数へんすうです。変数へんすうとはいっても、これは決め打き うよう変数へんすうです。いまのところいち初期しょきしたらあたいえるつもりはないので、変数へんすうではなく定数ていすうともえます。 初期しょきする みぎから50座標ざひょうくらいにスポーンさせたいとおもいます。 変数へんすう「スポーンするX座標ざひょう」をつく初期しょきする この変数へんすうのために前述ぜんじゅつした2つの変数へんすう用意よういしました。ここでの初期しょきには「スポーンするシーンのX座標ざひょう - 画面がめん右端みぎはしからのX座標ざひょう」という演算えんざんれてください。 この演算えんざん解説かいせつさきすすんでからにします。 表示ひょうじする条件じょうけん追加ついかする ようやく「もし」ブロックのしきはいります。 変数へんすう「スポーンするX座標ざひょう」が変数へんすう「★カメラのX座標ざひょう」よりちいさくなったら、ゴールが表示ひょうじされます。 もう1つ変更へんこうしてから解説かいせつします。 X座標ざひょうをカメラにわせてズラす 動作どうさ確認かくにんする これでうごかしてください。最終さいしゅうシーンにさしかかる50座標ざひょう手前てまえからゴールが画面がめん右端みぎはしはじめます。そして画面がめん右端みぎはしから50座標ざひょうからはプレイヤーにちかづくようにうごくはずです。 みょう表現ひょうげんですが、実際じっさい「ゴールがちかづいている」のであって、プレイヤーがちかづいているわけではありません。よこスクロールの実現じつげんに★カメラのX座標ざひょう使つかっているためです。プレイヤーはつねにX座標ざひょうはゼロ地点ちてんからうごいていないのです。 かく変数へんすう演算えんざん解説かいせつします さて、先延さきのばしにしてきた解説かいせつですが、動作どうさ確認かくにんまで出来できたのでここでおこないたいとおもいます。 解説かいせつすべきてんつぎの2つです。 • 表示ひょうじする条件じょうけんぶんについて • X座標ざひょうれた演算えんざんについて 表示ひょうじする条件じょうけんぶんについて スポーンするX座標ざひょうが★カメラのX座標ざひょうよりちいさくなったら表示ひょうじする、というのはどういうことか、数字すうじ解説かいせつしていきます。 変数へんすう「スポーンするX座標ざひょう」のあたい これには1030が格納かくのうされています。内訳うちわけ下図かずのとおりです。 変数へんすう「★カメラのX座標ざひょう」のあたい これはユーザーがみぎキーをすとスピードXに加速かそくりょく加算かさんされていき、スピードXのあたいがどんどん変数へんすう「★カメラのX座標ざひょう」に追加ついかされていく仕様しようです。 なので、みぎすすめばすすむほどプラスのあたいはいっていきます。0からはじまり、やがて1030の地点ちてんぎるでしょう。 このタイミングこそが、これ↓です。 X座標ざひょうれた演算えんざんについて そしてこのX座標ざひょうあたいをセットする演算えんざんです。 この240とはなんでしょうか。プレイヤー(カメラ)が1031の地点ちてんにいるとき、下図かずのように画面がめん右端みぎはしにゴールがえています。 この240も変数へんすうしておくとベターですね。理解りかいのために。 それをまえてあらためて数値すうち書き込か こんでみます。 240 + 1030 - 1031なので、実質じっしつは240 - 1ですね。このときゴールはX座標ざひょう239の位置いちにあります。 変数へんすう「スポーンするX座標ざひょう」は固定こていなのでわりませんが、変数へんすう「★カメラのX座標ざひょう」はプレイヤーがみぎすすむほどえます。プレイヤーがさらに100座標ざひょうすすんだとします。するとどうでしょうか。 240 + 1030 - 1131となり、実質じっしつは240 - 101 = 139となります。このときゴールは239から139に移動いどうしたことになります。 このあとにある「ゴールからはなれたらふたたかくす」という処理しょりつくえるとつぎのような挙動きょどうになります。 このように、プレイヤー(カメラ)がみぎに100すすめばゴールもひだりに100うごく、というのが今回こんかいよこスクロール世界せかいでのプレイヤー以外いがい挙動きょどう基本きほんになります。 ゴールからはなれたらふたたかくす ずっとゴールがえっぱなしになってしまうので、はなれたらかくします。えっぱなしでも問題もんだいはないかもしれませんが、よこスクロールの作法さほうみたいなものですね。 メッセージ管理かんりじゅつ ここでメッセージの管理かんりじゅつはじめようとおもいましたが、だいぶながいレッスンになってきたのでべつ記事きじにまとめておきます!(近日きんじつちゅうにm(_ _)m!!) ブロックをつく次回じかいはブロックをつくります。マリオといえばブロックをこわしたりブロックにったりできますよね。今回こんかいつくったゴールのうごきはブロックにも転用てんよう可能かのうです。 ただ、ゴールとちがってシーンのいろんな場所ばしょにスポーンする必要ひつようがあります。 また、プレイヤーがジャンプしてしたかられたらこわれてほしいですよね。 そういった実装じっそうにもトライしていきます。 すうじつ以内いないにまた更新こうしん予定よていです。この記事きじからもリンクをるので、ブックマークなどしておいてください。
ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!

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

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

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