ポヨーンと重力に従ってジャンプします。足の色と地面の色を使って地面で止まりますので、地面の高さが違っても地面に乗ることができます。地面に埋まってしまう現象も起こらない工夫をしています。

実際のお試しと、スクラッチのコードは
スクラッチのページ
で見ることができます。これをリミックスすると、自分のところに保存できて、改良したりできます。

動きの様子はこちら。

仕組み

スピードを表すdy

スプライトは足の色がはっきりしているペンギンを使いました。足の色は足だけで使われていないと変なことがおきてしまいます。ペンギンはくちばしの色が足の色と同じオレンジだったので、黄色に変えました。

プログラムのメインです。ポイントは、dyという縦方向の速さを表す変数です。

「ずっとループ」の中で、y座標に毎回dyが足されます。dyが正の数だと、ペンギンは上に移動します。値が大きければ、速く移動します。

dyが負の数だと、ペンギンは下に落ちます。大きい負の数だと速く下に進みます。

dyの動き

スペースキーを押すと、dyが15になります。なので、次のループでは、ペンギンは15上に進みます。

dyは、ペンギンの足がが地面に触っていなければ、1ずつ減っていきます。結果、ペンギンの上方向のスピードは徐々に遅くなります。

dyが0になると、その瞬間はペンギンは止まります。ジャンプの1番上に来たときです。dyはそれでも1ずつ減っていくので、マイナスになっていきます。こうなると、ペンギンは下に速度を上げながら落ちて行くことになります。

これが、重力に基づいたジャンプの仕組みです。スペースキーを押したときにセットするdyの値を、15でなくもっと大きな値にすれば大きなジャンプになります。

ループの中で「dyを-1づつ変える」としている-1を-2などとすれば、重力が強くなりすぐ落ちるジャンプとなります。

地面に立つ仕組み

地面で落下を止めるには、足の色が地面の色に触れたらdy=0にする、が基本的な考え方です。

しかし、落ちる速度が早いと、地面にかなり埋まった状態で止まってしまったりします。埋まった分を戻すようにプログラムを修正しても、地面に乗っているときは、ぶるぶる震えてしまったりします。

いろいろ方法はあるのかも知れませんが、僕が試行錯誤で落ちついた方法は、着地したときに埋まりを解消するブロックを別に作るというものです。upという名前にしました。

足が地面に触れなくなるまで、1つずつペンギンを上に移動させ、そこまで上に上がったら、1つ戻し、1だけ地面に触っている状態にします。

しかし、これだと水にゆっくり浮くように見えてしまいます。

そこで、ブロックの編集で(左のブロックで右クリック)、「画面を再描写せずに実行する」にチェックを入れます。

こうすることで、ブロック内の処理が描画なしで一瞬で進み、地面に埋まっている状態は見えなくなります。