スクラッチでマリオっぽいスクロールゲームを作る上級技② こ、こいつ(タイル)、動くぞ!

スクラッチでマリオっぽいスクロールゲームを作る上級技② こ、こいつ(タイル)、動くぞ!
グリフパッチ(動画)
ok-scratch(解説)

和訳解説は動画作者のグリフパッチさんご本人から許可をいただいて掲載しております。
チャンネルはYOUTUBE ( by griffpatch )からどうぞ。

タイルをグリッド状に並べることに成功したから、今度はスクロールする仕組みを作っていくぞ!
スターター
プロジェクト
リミックス用プロジェクトへ
難しさ

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

LOADING...

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

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

前回(ぜんかい)タイルをグリッド(じょう)(なら)べることに成功(せいこう)した。じゃあ(つぎ)はこのタイルをどうすればスクロールさせることができるのか。そこに挑戦(ちょうせん)していく。(いま)ってクローンをめっちゃ使(つか)ってるけど、そもそもスクラッチってクローンは300()までしか(つく)れないという制限(せいげん)がある。それを(かんが)えると、このままクローンでステージを()()くすのは得策(とくさく)とは()えない。そういう制限(せいげん)()(かた)もこのチュートリアルで()ていくぜ。応用(おうよう)()実装(じっそう)方法(ほうほう)だから、またまたスキルレベルが()がっちゃうね!

今回(こんかい)目標(もくひょう)「タイルをスクロールさせる」

ということでタイルをスクロールさせることができればこのチュートリアルは成功(せいこう)だよ。()かりやすくするためにスタータープロジェクトに(ふく)まれている「実験(じっけん)(よう)」というスプライトを表示(ひょうじ)してみよう。
そうするとタイルの(まわ)りが(くら)()えるようになったと(おも)う。この(ほう)()かりやすいから一時的(いちじてき)にこのまま(すす)めていこう!
スクラッチでマリオっぽいスクロールゲームを作る上級技② こ、こいつ(タイル)、動くぞ!を語るok-scratch ok-scratch

u003cpu003eこの実験(じっけん)(よう)スプライトのサイズが、記事(きじ)途中(とちゅう)からサイズが(こと)なっています。最初(さいしょ)は5x5の正方形(せいほうけい)ですが、途中(とちゅう)から(スクロールの(うご)きを確認(かくにん)できるあたりから)4x4の正方形(せいほうけい)()えています。とくに(うご)きに(ちが)いはないので()にしないでOKです。u003c/pu003e

タイルの配置(はいち)方法(ほうほう)修正(しゅうせい)する

ではスプライト「タイル」を(ひら)いておこう!
前回(ぜんかい)実験(じっけん)(とお)してタイルを配置(はいち)したけど、スクロールさせるために(すこ)修正(しゅうせい)する。

変数(へんすう)「X座標(ざひょう)」と「Y座標(ざひょう)」をつくる

タイルのXとY座標(ざひょう)直接(ちょくせつ)変更(へんこう)するのではなく、いったん変数(へんすう)として()保持(ほじ)していく。もう(すこ)(すす)めていくと理由(りゆう)()かるよ。

()()える(間違(まちが)いやすいから注意(ちゅうい)

じゃあ既存(きそん)のXとY座標(ざひょう)変数(へんすう)()()えていく。この操作(そうさ)間違(まちが)いやすいから1つずつ一緒(いっしょ)にやっていこう。
① X座標(ざひょう)(◯にする)
まず最初(さいしょ)のX座標(ざひょう)からだ。(しき)だけを()()して変数(へんすう)にセットするぞ。
そしてブロックを()()える↓
大丈夫(だいじょうぶ)かな?
② Y座標(ざひょう)(◯にする)
(つぎ)のY座標(ざひょう)もやってみるよ。
ブロックを()()える。
③ Y座標(ざひょう)(◯ずつ()える)
(つぎ)はY座標(ざひょう)を◯ずつ()えるところだ。ここは(しき)がないから()を32にして()()える。
④ X座標(ざひょう)(◯ずつ()える)
最後(さいご)にX座標(ざひょう)だ。
よし!あ、まだ(うご)かないよ。もう(すこ)作業(さぎょう)しよう。

メッセージ「タイルを配置(はいち)します」を(つく)

メッセージを(つく)ってタイルの配置(はいち)(すす)めていく。
これを()()ったときブロックを()いてXとY座標(ざひょう)をセットするようにしていくよ。

変数(へんすう)()()てる

さきほど(つく)った変数(へんすう)をここにハメてみようか。

メッセージを(おく)

(みどり)(はた)のところでメッセージを(おく)ろう。
これで(いま)までと(おな)(うご)きをするようになった!
  • なぜメッセージを送(おく)ってるの?ブロック定義(ていぎ)でよくない? なぜメッセージを送(おく)ってるの?ブロック定義(ていぎ)でよくない?
    u003cpu003e最終的(さいしゅうてき)にはこのメッセージ「タイルを配置(はいち)します」は(べつ)のスプライトから()()すことを想定(そうてい)しているんだ。あと、クローン1つ1つがメッセージを()()って処理(しょり)実行(じっこう)できるようにもなるから、このあとを見据(みす)えると都合(つごう)がいいんだ。u003c/pu003e

カメラを(つく)

カメラXとカメラYという変数(へんすう)用意(ようい)して、このプロジェクトに「カメラ」という概念(がいねん)導入(どうにゅう)する。カメラがあることで、このあと(つく)るプレイヤー(マリオ)の(うご)きに()わせてタイルがスクロールするような演出(えんしゅつ)可能(かのう)になるんだ。

変数(へんすう)「★カメラX」と「★カメラY」を(つく)

両方(りょうほう)ともすべてのスプライトで参照(さんしょう)できるように(つく)っていこう。

スライダーにして最大(さいだい)500まで変更(へんこう)できるようにする

変数(へんすう)表示(ひょうじ)(みぎ)クリックしてスライダーで変更(へんこう)できるようにしておこう。
もう一(かい)(みぎ)クリックして、今度(こんど)はスライダーの指定(してい)範囲(はんい)変更(へんこう)しておこう。
とりあえず500にしておいて。

カメラYもスライダーにしておく

カメラYも(おな)じくスライダーにして0から500まで指定(してい)できるようにしよう。横並(よこなら)びにしておくと()かりやすいよ。

X座標(ざひょう)からカメラXを減算(げんざん)する

タイルの位置(いち)をカメラに()わせて(うご)くようにしたいので、X座標(ざひょう)からカメラXの()減算(げんざん)する。
Y座標(ざひょう)(がわ)(おな)じくY座標(ざひょう)からカメラYの()減算(げんざん)して()()えよう。こうなる↓

メッセージを(つね)(おく)るようにする

(みどり)(はた)のところに()いたメッセージを(おく)処理(しょり)()(かえ)されるようにループで(かこ)うよ。

スクロールの(だい)()()

これで(うご)かしてみると……
きったぁ!!スクロールの産声(うぶごえ)()こえるぜ!

タイルを(まわ)()ませる(リサイクルする)

(うえ)動画(どうが)()てみると、タイルが(うご)くのはいいけど(しろ)余白(よはく)()えてしまうよね。スクロールゲームでは余白(よはく)があったら(こま)るので、画面(がめん)(がい)()えたタイルを(まわ)()ませて余白(よはく)()めていくよ。

タイルを配置(はいち)するときに(まわ)()み(リサイクル)を実装(じっそう)する

メッセージ「タイルを配置(はいち)します」を()()ったときに、タイルがどこにいるかで(まわ)()()かスクロールするかを、クローン1つ1つに判断(はんだん)させよう。

画面(がめん)(がい)(ひだり))にいるかどうか調(しら)べる

まずタイルの場所(ばしょ)(X座標(ざひょう))はこれで()かる↓
そしてタイルが画面(がめん)(がい)(いま)(くら)部分(ぶぶん)のこと)の座標(ざひょう)はコレで()かる↓
正確(せいかく)()うとこれは画面(がめん)(がい)左側(ひだりがわ))の座標(ざひょう)だね。クローン生成(せいせい)(すう)Xに16を()けるとちょうど画面(がめん)(がい)座標(ざひょう)になるよ。クローン生成(せいせい)(すう)Xは5だから「5 x -16」ということだね。これがどうして画面(がめん)(がい)座標(ざひょう)()るのか、視覚的(しかくてき)()かるように↓コレを()てね。
一番左(いちばんひだり)(あか)(せん)が5 x -16で算出(さんしゅつ)されるX座標(ざひょう)位置(いち)だよ。ここよりもタイル自身(じしん)のX座標(ざひょう)(ちい)さければ、すなわち画面(がめん)(がい)()てるっていう判断(はんだん)だね。(しき)にするとこういう(かん)じ↓
これを条件(じょうけん)(しき)にはめよう。

画面(がめん)(がい)(みぎ))に(まわ)()ませる

反対(はんたい)(がわ)移動(いどう)させよう。反対(はんたい)(がわ)()演算(えんざん)はこれ↓
さっきはマイナス16だったけど、今度(こんど)は32だね。 また視覚(しかく)()してみたよ↓
今度(こんど)(はん)マス(16)じゃなくて1マス(32)を5(かい)プラスの方向(ほうこう)(うご)かすと右側(みぎがわ)のX座標(ざひょう)算出(さんしゅつ)できるというのが()()れるかな。ブロックにするとこんな(かん)じ↓
「◯ずつ()える」ブロックになってるか注意(ちゅうい)してね。
(うご)きを確認(かくにん)する
今回(こんかい)から実験(じっけん)(よう)スプライトのサイズを4x4に変更(へんこう)してるよ。うっすらとタイルが(まわ)()んでいる様子(ようす)()()れるかな?
こうすることでクローンをリサイクルできるんだ。これこそがスクラッチのクローン300()制限(せいげん)()っかからないようにスクロールを実装(じっそう)できるカラクリってわけだね。ただ逆方向(ぎゃくほうこう)(うご)かすとまだリサイクルができてないよね。(つぎ)逆方向(ぎゃくほうこう)へのリサイクルも実装(じっそう)していくよ。

両方向(りょうほうこう)対応(たいおう)した(まわ)()処理(しょり)(つく)

まず条件(じょうけん)(しき)から()えていくよ。カンタンなのは単純(たんじゅん)条件(じょうけん)ブロックをまるごとコピーしてしまう方法(ほうほう)だけど、ここでは数学的(すうがくてき)なトリックで解決(かいけつ)していく。といっても何度(なんど)かやったことがある絶対値(ぜったいち)使(つか)った方法(ほうほう)だから、比較的(ひかくてき)シンプルな(わざ)だよ。

画面(がめん)(ない)かどうかの判定(はんてい)()える

条件(じょうけん)(しき)()えるのは3箇所(かしょ)
まずX座標(ざひょう) - カメラXの絶対値(ぜったいち)(もと)める。それがクローン生成(せいせい)(すう)X x 16より(おお)きいかどうか調(しら)べる。変更(へんこう)()はこんな(かん)じ↓

X座標(ざひょう)とカメラXの比較(ひかく)(つく)

(つぎ)はX座標(ざひょう)がカメラXよりも(ちい)さいかどうかを調(しら)べるために、この条件(じょうけん)ブロック(ない)にもう1つ条件(じょうけん)ブロックを配置(はいち)する。
X座標(ざひょう)がカメラXより(ちい)さいかどうか
(おお)きい場合(ばあい)
(ちい)さい場合(ばあい)(いま)まで(とお)り32ずつX座標(ざひょう)()えればOKで、(おお)きい場合(ばあい)(ぎゃく)に-32ずつ()えればOk。

左右(さゆう)にスクロールするぞ!

ひゅいーん!

Y(じく)にもスクロールさせる

X座標(ざひょう)処理(しょり)をまるごと複製(ふくせい)しよう。

Y(じく)になるように各所(かくしょ)()()える

あとは変数(へんすう)()()えよう。()()えるのは6箇所(かしょ)

タテにもスクロールするぅ!

(くろ)いマスクをどけてみる

よし基本的(きほんてき)なスクロールの(うご)きは出来(でき)た!じゃあ(くろ)いマスクをどけてみようか、実験(じっけん)(よう)スプライトを表示(ひょうじ)オフにしてみよう。
それでスクロールしてみよう!っと、あれ?
ガッタガタやん!?さっきまでのスムーズなスクロールはどこへ!?

タイルを画面(がめん)いっぱいに(ひろ)げる

「なにかミスったか?」と(あせ)るかもしれないけど、大丈夫(だいじょうぶ)(じつ)はさっきからずっとガタガタだった。たんに(くろ)いマスクがあったおかげで()にならなかっただけなんだ。ということは(いま)中央(ちゅうおう)に5マスずつしかないけど、画面(がめん)いっぱいにこのタイルを(ひろ)げればさっきみたいな挙動(きょどう)になるはずだ。

(なに)タイル必要(ひつよう)計算(けいさん)する

ではスクラッチのプレイ画面(がめん)(よこ)(たて)何個(なんこ)ずつクローンを(つく)ればいいか計算(けいさん)してみようか。いまは適当(てきとう)に5 x 5を定数(ていすう)として「■クローン生成(せいせい)(すう)X」「■クローン生成(せいせい)(すう)Y」に()れてるけど、ちょっと()(ざん)してみる。
ヨコ
スクラッチのプレイ画面(がめん)横幅(よこはば)座標(ざひょう)は-240から240まで合計(ごうけい)480ある。そして1つのタイルの(おお)きさは32だから、480 ÷ 32 = 15になる。ただ15だとピッタリすぎてリサイクルされる一瞬(いっしゅん)(しろ)余白(よはく)()えてしまうのでプラス1して、16()のクローンを用意(ようい)する。↓この動画(どうが)最初(さいしょ)変数(へんすう)「■クローン生成(せいせい)(すう)X」は15、途中(とちゅう)から16で再起動(さいきどう)して両者(りょうしゃ)(ちが)いを確認(かくにん)できるよ。16の(ほう)がいい(かん)じでしょ?
タテ
タテは-180から180だから、360 ÷ 32 = (やく)12だ。ヨコのときと(おな)じく12だと余白(よはく)()になるからプラス1して13を変数(へんすう)「■クローン生成(せいせい)(すう)Y」にセットしよう。コーディングはこんな(かん)じになる↓
よしよし、これでカンペキ……かな?
なーんか、(した)(ほう)のタイルおかしくない?画面(がめん)(がい)()える瞬間(しゅんかん)にもたつくような(うご)きしてるよね?相撲(すもう)土俵(どひょう)(ぎわ)(ねば)力士(りきし)みたいにタイルが(ねば)ってスムーズに()えない……

画面(がめん)(がい)にスムーズに移動(いどう)する処理(しょり)

これはスクラッチ独特(どくとく)仕様(しよう)で、画面(がめん)から()えるときにちょっと()っかかるように(うご)くんだよね。これを解決(かいけつ)する方法(ほうほう)色々(いろいろ)あるんだけど、今回(こんかい)はBIGというコスチュームを使(つか)った(わざ)紹介(しょうかい)する。(かなら)ずしも直感的(ちょっかんてき)ではないけど、この()っかかり現象(げんしょう)はBIGで解決(かいけつ)できる、って(おぼ)えてしまえばOKだ。コスチュームを()てみて。
1つ()にBIGっていう名前(なまえ)のコスチュームがあるよね。(ほか)のタイルのサイズは32 x 32だけど、このコスチュームは36 x 36になってて、(すこ)しだけ(おお)きめのBIGサイズなコスチュームなんだ。こいつがいい仕事(しごと)をする。画面(がめん)(がい)()える瞬間(しゅんかん)だけタイルをこのBIGに着替(きが)えさせることで、あたかもスムーズに画面(がめん)(がい)()えるような演出(えんしゅつ)ができるんだ。()っかかり現象(げんしょう)()きるタイミングが32 x 32よりも36 x 36のほうが(サイズが(おお)きいから)(おそ)んだ。その特性(とくせい)利用(りよう)したトリック(わざ)ってこと。まぁスクラッチ以外(いがい)では使(つか)えない(わざ)だろうけど、何事(なにごと)(あきら)めなければ()(みち)がある、って(しん)じて実験(じっけん)しまくるのはプログラミングにおいてはメジャーな精神(せいしん)(ろん)だったりする。

BIGに着替(きが)える

ではメッセージ「タイルを配置(はいち)します」を()()ったときの、座標(ざひょう)変更(へんこう)反映(はんえい)する直前(ちょくぜん)着替(きが)えようか。
よし、座標(ざひょう)反映(はんえい)したらすぐにまた(もと)のコスチュームに(もど)せばOK!……なんだけど、どのコスチューム(タイル)に(もど)せばいいか()からないから変数(へんすう)(つく)ってコスチューム(ばん)(ごう)保持(ほじ)しておこう。

変数(へんすう)「コスチューム(ばん)(ごう)」を(つく)

  • タイルのコスチューム番(ばん)号(ごう)、の方(ほう)が正確(せいかく)では? タイルのコスチューム番(ばん)号(ごう)、の方(ほう)が正確(せいかく)では?
    u003cpu003eうん、たんにコスチューム(ばん)(ごう)っていう名前(なまえ)にするよりも、タイルのコスチューム(ばん)(ごう)にしたほうが()かりやすいと(かん)じる(ひと)(おお)いと(おも)う。もしそう(かん)じるなら、さっき(つく)ったX座標(ざひょう)とY座標(ざひょう)も「タイルのX座標(ざひょう)」「タイルのY座標(ざひょう)」っていう(めい)(まえ)(ほう)正確(せいかく)だと(かん)じるかもね。u003c/pu003eu003cpu003e(ぼく)場合(ばあい)はu003cemu003eスプライト(めい)が「タイル」なわけだからu003c/emu003e、コスチューム(ばん)(ごう)というローカル変数(へんすう)があったらそれはu003cemu003e暗黙(あんもく)了解(りょうかい)でu003c/emu003e(タイルの)コスチューム(ばん)(ごう)とか、(タイルの)X座標(ざひょう)っていう解釈(かいしゃく)()ると(おも)っているからわざわざ「タイルの」って言葉(ことば)()けてない。()けないと(だれ)のコスチューム(ばん)(ごう)なのか()からない!というときはつけるけど、今回(こんかい)()けなくても()かると(おも)ったので()けてない。でも()けてもOK!u003c/pu003eu003cpu003eこのあたりの議論(ぎろん)()()めるとけっこうディープな(はなし)になっていくから面白(おもしろ)かったりもする。オブジェクト指向(しこう)とかポリモーフィズムといったプログラミング(じょう)概念(がいねん)にまで波及(はきゅう)する可能性(かのうせい)もあるので、興味(きょうみ)がある(ひと)調(しら)べてみるのもアリ!u003c/pu003e

初期化(しょきか)()のコスチューム(ばん)(ごう)保持(ほじ)する

ブロック定義(ていぎ)「_初期(しょき)()する」でコスチューム(ばん)(ごう)をランダムに()()ててるところがあるよね。そこで着替(きが)えるのではなく、いったん変数(へんすう)にコスチューム(ばん)(ごう)保持(ほじ)するように()()えるよ。
(しき)だけ(うつ)したらブロックも()()える。

(もと)のタイルに(もど)

よし、さっきBIGに着替(きが)えたところに(もど)ろう。そこで座標(ざひょう)反映(はんえい)させたあとに(もと)のタイルに(もど)るようにブロックを()くよ。

スムーズに画面(がめん)(がい)()くぞ!

画面(がめん)(そと)にスムーズに移動(いどう)できるようになったぜ!ドスコイ!

ステージを(つく)ってみる!

ここまでたどり()いた諸君(しょくん)!おめでとう!いま(つく)ったプロジェクトこそが、素晴(すば)らしきスクロールゲームのエンジンとなる革命的(かくめいてき)なタイルマップシステムだ。いまはランダムに(なら)んでいるタイルを、規則的(きそくてき)(なら)べることでマリオやマイクラ、忍者(にんじゃ)(でん)といった名作(めいさく)(はぐく)まれる土台(どだい)となるぞ!たまらん!たまらんですぞぉ!みんながどんな作品(さくひん)(つく)ろうとニヤニヤしているのか、想像(そうぞう)するだけでこっちもワクワクしてくる!()かる(ひと)はどんどんステージを(かんが)えておいてくれ。もちろんチュートリアルもまだ()わらないぜ。このあとステージを(つく)()()方法(ほうほう)紹介(しょうかい)して、実際(じっさい)にマリオ(プレイヤー)がどうすればタイルの(うえ)(あば)れまわることができるのかまで紹介(しょうかい)していく予定(よてい)だ!刮目(かつもく)して()つべし。
ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!

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

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

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