2021年11月14日日曜日

javascriptでマリオを作る part2

 


前回の続きです。


このままでは、毎回土管にぶつかってゲームオーバーして、鳥がかわいそうなので、土管を出さないようにしたいと思います。



117行目付近で「gap」が「ドカンの縦幅」が定義されていました。

これを0にすれば、高さのない土管となってぶつからなくなるか、、、な。




むしろひどくなった


土管と土管の間の高さのことだったのか、、、


   var gap = 200;  //ドカンの縦幅


ぐらいにしたらどうだろう


お、だいぶ間が大きくなった。


   var gap = 300;  //ドカンの縦幅


では、、、




やった。


死ななくなりました。


本当は地面ので土管が出ていると思うのですが、とりあえずいったんこのまま進んで、問題があったら修正したいと思います。


次にやりたいのは、マリオといえばジャンプ


鳥が上に移動する処理は、以下の部分のようです。


キーを何か押すと、上に上がるために、現在位置からマイナス25、Y軸に対して行っています。


下がる処理はこちら


地面に落ちるまで、現在位置からプラス1して、Y軸に対して下向きに増やしています。


マリオ的なジャンプにするためには以下の2点を何とかしないといけないようです。

1.ジャンプ中はさらにジャンプできないようにする

2.ジャンプした瞬間は上にすぐ移動するけど、ジャンプ頂点付近に行くにつれてゆっくり、頂点を超えたら最初ゆっくりで、時間がたつほど早く落ちるようにする。


まず1からやってみたいと思います。

条件によって「やる」「やらない」を判断するときは「フラグ」と呼ばれる変数を用意することが多いです。今回は「flgJumping」という名前をフラグとして使って、

0:ジャンプしてない

1:ジャンプ中

という使い方にしてみたいと思います。

1:ジャンプ中 はさらにジャンプできないようにするイメージです。



変数を準備して、、、



キーボードで何か押されたら、今まで常に「今の状態からマイナス25」していたものを

「flgJumpingが0の時だけマイナス25 そのあとフラグは1にしちゃう」

にしてみます。


写真だとわかりませんが、確かに1回押したら、もう次はジャンプできなくなりました。

ただ、、、地面に落ちても再ジャンプできない。。。。


地面に落ちたら再ジャンプできるようにしてみます。


前回 地面に着地するまで鳥を降下させる処理のあとに、

地面に着地したら、フラグを0に戻す というようにしてみます。

bYは鳥のY座標で、地面が「300 - fg.height - bird.height」なので、それよりも大きくなったら、、、大きくなることは基本ないはずですが、「==」だけにしてしまうと、何かの拍子で地面の座標が取れなかった場合にフラグを変更できないので、地面以下の座標になったら、で保険をかけています。


どうかな、、、



写真ではわかりませんが、ジャンプ中はジャンプできなくなりました。

次は2のジャンプする動きにチャレンジしたいと思います。


今日までの修正はここにアップしておきます。