スクラッチでマリオのゲームを作る特大レッスン#02 ジャンプせよ

スクラッチでマリオのゲームを作る特大レッスン#02 ジャンプせよ
ok-scratch
マリオのジャンプの作り方が分かります。
難しさ

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

LOADING...

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

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

ジャンプをつくる マリオといえばジャンプしててきんでたおすというのが定番ていばんですよね。ブロックをこわすときっともジャンプしますね。つまりジャンプはスーパーマリオで最っともっとっとも大事だいじうごきの1つとえます。 ここからはジャンプをやっていきましょう。 いままではXじくうごきでしたが、ここからYじくうごきに着手ちゃくしゅするので、うごきがますます複雑ふくざつになっていきます。1つずつ丁寧ていねい解説かいせつしていくので、一緒いっしょにがんばりましょう! じょうキーを感知かんちする とりあえずうえキーをしたらY座標ざひょうを10ずつえるブロックを追加ついかして、うごきをたしかめましょう。っともちろんうごくとっともいますが、儀式ぎしきてきかんじです。 変数へんすう「スピードY」をつくる Xじくのときとおなじように変数へんすうでスピードを管理かんりしていきます。スピードYという変数へんすうつくってください。 うえしたら変数へんすう「スピードY」に加算かさんする うえキーをしたらスピードYを一定いってい数値すうちにセットします。ひとまず10にしておきます。 Y座標ざひょう変数へんすう「スピードY」を加算かさんつづけます Xじくのときとおなじように、Y座標ざひょうっともスピードYを加算かさんつづける仕様しようにします。はたしたらにある「ずっと」ループないにブロックを追加ついかしてください。 変数へんすう「★重力じゅうりょく」を追加ついかする これだけではうえしたらプレイヤーがずっとうえいている状態じょうたいつづいてしまうので、プレイヤーをした落下らっかさせる処理しょり追加ついかします。 ここでは重力じゅうりょくという変数へんすうつくり、つねにプレイヤーをした引っ張ひ ぱちからくわえます。 この変数へんすうはすべてのスプライトようつくるので、接頭せっとうに★をつけておいてください。 初期しょきする マイナス1になるように初期しょきしてください。 プレイヤーを重力じゅうりょくとしつづける 変数へんすう「スピードY」を変数へんすう「★重力じゅうりょく」でつづけます。こうすることでプレイヤーはつね重力じゅうりょく影響えいきょうけることになります。 プレイヤーの初期しょき位置いち初期しょきする いちいちプレイヤーの位置いちっともすのは手間てまなので、すこたかいところに初期しょき位置いち設定せっていします。 着地ちゃくちできるようにする うごかしてみると、プレイヤーが画面がめんしたまでちてしまいましたね。ずっと重力じゅうりょく影響えいきょうけているので、際限さいげんなくした移動いどうしてしまうのです。 そこで、「っともし」ブロックを使つかってプレイヤーが着地ちゃくちできるようにしましょう。 これには調しらべるブロックの1つである「○にれた」ブロックが有効ゆうこうです。ステージスプライトにれたら変数へんすう「スピードY」をゼロにして、これ以上いじょう落下らっかめます。 しかし、こうするとうごかなくなってしまいますよね。 また、ときどきプレイヤーがステージにまってしまったり、すこしだけ空中くうちゅういてしまったりする現象げんしょうっともきているのではないでしょうか。 着地ちゃくち判定はんてい条件じょうけんをつける まずはうごかなくなってしまう問題っともんだいにタックルします。 うごかなくなった原因げんいんは、ステージにれているあいだはずっと変数へんすう「スピードY」がゼロに固定こていされてしまうので、落下らっかしたタイミングだけではなく、そのあとっともずっと変数へんすう「スピードY」がゼロからわらなくなってしまうからです。 そこで、さらに条件じょうけん追加ついかします。 変数へんすう「スピードY」がゼロよりっともおおきいときだけ、この着地ちゃくち判定はんていおこなわれるようにします。こうすることで、着地ちゃくちしたあとにまたうえキーをせば、変数へんすう「スピードY」は10にっともることができます。 ブロック定義ていぎ処理しょりうつす すこしループない混雑こんざつしてきたので、このタイミングでいままでのYじく移動いどう処理しょりをブロック定義ていぎえておきます。 ブロック定義ていぎうつわったら、動作どうさ確認かくにんをしてとりあえずここまでのうごきがこわれていないか確認かくにんしましょう。 地面じめんれているかどうかを1座標ざひょうずつ調しらべる ここからは、着地ちゃくちにプレイヤーが地面じめんまってしまう、または地面じめんからすこいている問題っともんだいにタックルしていきます。 様々さまざま方法ほうほうがありますが、プレイヤーがつぎ移動いどうする位置いちにステージがあるかどうかを1座標ざひょうずつチェックしていく作戦さくせんでいきます。 かりづらい部分ぶぶんなので、なん読み返よ かえしてマスターしてください。マリオだけではなく、シューティングゲームやイラストアニメーションのようなべつプロジェクトでっとも応用おうよう可能かのう処理しょりです。かならやくちます。 Y座標ざひょうを−1ずつえるように調整ちょうせいする まずはブロック定義ていぎ「Yじく移動いどうする」ない処理しょりすこしだけえます。一番いちばんしたにあった「y座標ざひょうをスピードYずつえる」ブロックをはずして、すこうえ移動いどうします。また、あたいを-1にえます。 文字っともだとかりづらい部分ぶぶんなので画像がぞうをごらんください。 変数へんすう直前ちょくぜんのY座標ざひょう」をつくる Y座標ざひょうを-1してプレイヤーがステージにれているか調しらべて、れていたら移動いどう中断ちゅうだんするために直前ちょくぜんのY座標ざひょうっともしたいとっともいます。そこで、チェックまえのY座標ざひょう変数へんすう直前ちょくぜんのY座標ざひょう」にあずけておきます。 変数へんすう直前ちょくぜんのY座標ざひょう」のおかげで、Y座標ざひょうを-1する処理しょりなんかい繰り返く かえしてっとも、カンタンにY座標ざひょうっともっともせます。 変数へんすう直前ちょくぜんのY座標ざひょう」を初期しょきする 処理しょり直前ちょくぜんにY座標ざひょうあたい初期しょきします。 ステージにれたらっともっともす ステージにれたタイミングで、直前ちょくぜんのY座標ざひょうっともします。こうすることで地面じめんれた瞬間しゅんかん落下らっかまります。 しかし、これだとふたたびジャンプができなくなってしまいます。 なぜなら、「っともし」ブロックのせいで変数へんすう「スピードY」がゼロよりおおきくなるまえにプレイヤーのY座標ざひょうを-1してステージにれたか判定はんていするので、かならずステージにれている判定はんていになってしまうからです。 これを改善かいぜんするには2ステップ必要ひつようです。ていきましょう。 変数へんすう「スピードY」がゼロなら、という条件じょうけんをやめる 原因げんいんの1つである「っともし」ブロックを除去じょきょします。 進行しんこう方向ほうこうの1つさきにある座標ざひょうをチェックするようえる いまは「Y座標ざひょうを-1ずつえる」と直接ちょくせつ入力にゅうりょくしているので、これではかなら方向ほうこうしかチェックしません。しかしジャンプするときはじょう方向ほうこうかっているので、したをチェックする必要ひつようはなく、むしろ邪魔じゃまです。 そこでうえかうときはY座標ざひょうをプラス1して、したかうときはY座標ざひょうをマイナス1したいとっともいます。 それには絶対ぜったい有効ゆうこうです。 このしきはどうなっているのでしょうか。 たとえば変数へんすう「スピードY」のあたいが10だったとします。これはうえかっているときのあたいですね。プラス10の絶対ぜったいは10なので、このときのしきは「10 ÷ 10」つまり1です。 そして変数へんすう「スピードY」のあたいが-5だったとします。これはしたかっているときのあたいです。マイナス5の絶対ぜったいは5なので、このときのしきは「-5 ÷ 5」つまりマイナス1となります。 これによりうえかうときはプラス1、したかうときはマイナス1という要件ようけん実現じつげんできました。 しかし、うごきをためしてみるとジャンプがちいさくなってしまっていませんか?それにうえキーをずっとしていたらやっぱり空中くうちゅう浮遊ふゆうしてしまいます。どうやらまだまだ改善かいぜんしないといけないようですね。 判定はんてい処理しょり繰り返く かえす ジャンプがちいさくなっている理由りゆうは、スピードYのあたいが10であろうと100であろうと、絶対ぜったいって1にしてしまっているので、Y座標ざひょうが1ずつしかわらないというてんです。 そこで、この処理しょり変数へんすう「スピードY」の絶対ぜったいぶんだけ繰り返く かえします。 これでジャンプは予定よていとおり10座標ざひょうぶんうごくようになりました。 しかし、なんだかうごきが「っともっさり」していませんか?ずいぶんゆっくりなジャンプになってしまっているとっともいます。この理由りゆうは、Y座標ざひょうを1えるたび判定はんてい処理しょりおこなわれているので、1座標ざひょうずつカクカクしてえているからです。 ブロック定義ていぎさい描画びょうがさせずにおこな今回こんかいのカクカク現象げんしょうは、1座標ざひょうずつえるたび判定はんてい処理しょりおこなわれてしまっていることが原因げんいんでした。 そこで、変数へんすう「スピードY」が10なら、10かい判定はんてい処理しょりわってからプレイヤーをうごかすように変更へんこうできればOKです。 ブロック定義ていぎには「画面がめんさい描画びょうがせずに実行じっこうする」というオプションがあることをご存知ぞんじですか? このオプションこそが今回こんかいかぎです。 ブロック定義ていぎみぎクリックしてオプションにチェックをれてからOKをしてください。 うごきはどうですか?しっかり10座標ざひょうぶんのジャンプができるようになっているのではないでしょうか。 上手うまうごかないひとは「○かい繰り返く かえす」ブロックに変数へんすう「スピードY」の絶対ぜったいはいっているかチェックしてください。 この「さい描画びょうがせずに実行じっこうする」オプションは、ある意味いみ未来みらい予想よそうができるっとものです。一瞬いっしゅん処理しょりをしているから、人間にんげん感覚かんかくではとらえきれないためです。色々いろいろ場面ばめんやくつので、このオプションの使つかかたの1つとしてマスターしていくといでしょう。 空中くうちゅうジャンプをできなくする さて、ジャンプはいいかんじになってきましたが、ジャンプちゅううえキーをすときなだけ空中くうちゅうジャンプができてしまうのが現状げんじょうです。 これはこれで面白っともしろ発想はっそうつながりそうですが、ここでは空中くうちゅうジャンプは禁止きんししたいっともいます。 かんがかたとしては、空中くうちゅうにいるかどうかを判定はんていして、空中くうちゅうにいたらうえキーをしてっともかなくするというかんじです。 変数へんすう滞空たいくう時間じかん」をつく空中くうちゅうにいるかどうかを判定はんていするために、滞空たいくう時間じかんという変数へんすうつくります。 加算かさんつづける 滞空たいくう時間じかんに1を加算かさんつづけるようにします。 じょうキーの条件じょうけん滞空たいくう時間じかん使つか滞空たいくう時間じかんが3未満みまんのときだけ変数へんすう「スピードY」が10になるように調整ちょうせいします。 この3という数値すうち感覚かんかくてきっとものですから、自分じぶんうごきをたしかめながらどのくらいの数値すうちいか見定みさだめてっともOKです。 これで空中くうちゅうジャンプっともおこなわれなくなり、マリオのよこスクロールの基本きほんてき動作どうさ完成かんせいしました。あるく、ジャンプ、よこスクロール、この3つが完成かんせいしたことはおおきな進歩しんぽです。 マリオの土台どだいができたとってっとも過言かごんではありません。 かべさか処理しょり挑戦ちょうせんしていこう! つぎにタックルするのは、ステージが起伏きふくんでいるさいしょうじる問題っともんだいです。すなわち「かべたったらまる」「でっともさかならのぼる・りる」です。 かべたったらまるとってっとも今回こんかいはプレイヤーのX座標ざひょううごかさずに★カメラのX座標ざひょう使つかって移動いどう実現じつげんしていますよね。こういう場合ばあいはどうコーディングしていけばよいのでしょうか。 また、さかっとも厄介やっかいです。かべさかちがいをプログラムじょうどのように見分みわければいでしょうか。 これらっとも厄介やっかい実装じっそう必要ひつようですが、引き続ひ つづ丁寧ていねい解説かいせつしていきますので、一緒いっしょにトライしていきましょう!
ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!

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

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

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