スクラッチプログラミングに挑戦している皆さん、どうも!スクラッチコーチです。
ジャンプを
作る
マリオといえばジャンプして
敵を
踏んで
倒すというのが
定番ですよね。ブロックを
壊すとき
もジャンプしますね。つまりジャンプはスーパーマリオで最
も大事だいじな
動うごきの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
座標ざひょうを
使つかって
移動いどうを
実現じつげんしていますよね。こういう
場合ばあいはどうコーディングしていけばよいのでしょうか。
また、
坂さかもっとも厄介やっかいです。
壁かべと
坂さかの
違ちがいをプログラム
上じょうどのように
見分みわければ
良よいでしょうか。
これら
もっとも厄介やっかいな
実装じっそうが
必要ひつようですが、
引き続ひ つづき
丁寧ていねいに
解説かいせつしていきますので、
一緒いっしょにトライしていきましょう!