Scratchでいろいろな種類のジャンプを作ると思いますが、着地したあとは何もしないケースが多いと思います。
人や動物などのキャラクターだったらきれいに着地させるだけでいいですが、モノだったら普通は地面ではね返ってバウンドしますよね?
今回はスーパーボールやピンポン玉に近いイメージで、何度も地面でバウンドしながら少しずつ高さを小さくしていくスクリプトを作ってみます。
この記事を読んでいただくと、スプライトを横方向に移動しながらバウンドさせるスクリプトの作り方と失敗しやすいポイントが分かります。
スクリプトの作り方
完成した動き
本物のスーパーボールみたいな動きができました。ゴムボールが弾んでる感が上手く表現できたと思います。
どこを通っているかが分かりやすいようにペンカテゴリーのブロックで軌跡を描いていますが、もちろん無くても問題ありません。
完成したスクリプト
スクリプト全体です。スプライトはバスケットボール1個だけです。
初期化する部分、よこ方向に動かす部分、たて方向に動かす部分の3つのスクリプトブロックで構成しています。
- よこ移動量:すべてのスプライト用 or このスプライトのみ
- たて移動量:すべてのスプライト用 or このスプライトのみ
- バウンド:すべてのスプライト用 or このスプライトのみ
スクリプトの説明
ポイント①:初期化処理
ペンの描画処理と変数の初期化がメインです。
変数「よこ移動量」と「たて移動量」の乱数の幅を変えると、縦横それぞれの動きの幅を大きくしたり小さくしたり変更できます。
「バウンド」変数には、バウンドさせる量を設定します。※バウンドさせる回数ではないので注意。
ポイント②:よこ方向の動きの減衰をつくる
この部分は、よこ方向の移動部分のみ作っています。
「よこ移動量を-0.04ずつ変える」ブロックのところで移動する幅を減少させています。
ポイント③:たて方向の動きの減衰をつくる
この部分は、たて方向の移動部分のみ作っています。
「たて移動量を-1ずつ変える」ブロックのところで移動する幅を減少させています。
また、「バウンドを-2ずつ変える」部分でバウンドの回数を調整しています。
ポイント④:3つのスクリプトブロックを同時に実行する
すべて「スペースキーが押されたとき」に同時に実行します。
スペースキーでなく緑の旗でも良いのですが、何度も繰り返し実行するためにはこの条件は入れておきましょう。
厳密にいうと、たて方向移動とよこ方向移動の2つのスクリプトブロックだけ同時実行でも動くには動きますが、クリック数が増えてしまうので効率が良くありません。
これらのスクリプトブロックを作れば、バウンドの動きは完成です!
失敗しやすいポイント
スクリプトを組むにあたっていくつか注意点があります。
失敗パターン①:スプライトが地面に接触していてジャンプできない
今回使ったバスケットボールのスプライトでは、Y座標を「-140」の位置からスタートさせていて、たて方向の処理中も「-140」から下には行かないようにしています。
これはギリギリ地面に接触しない位置をねらって調整したためです。
「(茶色:地面の色)に触れたまで繰り返す」ブロックを判定処理に使っているので、地面に接触してしまうとバウンド処理を実行してくれません。
これを例えば、別のスプライトに変更した場合(下図の例ではビーチボール)、Y座標の位置を再度調整する必要があります。下図の例では「-135」に変更。
応用編
バウンドを利用したゲームは色々考えられると思いますが、以下のようにブロック崩しゲームと同じような要領で作ることもできます。
※スペースキーを押すとボールを投げます。ボールの勢いはランダムです。
まとめ
さいごに、スプライトを横方向に移動しながらバウンドさせるスクリプトの作り方のポイントについてまとめます。
- ポイント①:初期化処理
- ポイント②:よこ方向の動きの減衰処理
- ポイント③:たて方向の動きの減衰処理
- ポイント④:3つのスクリプトブロック同時実行
どうでしたか?上手くできたでしょうか?
他にも役に立つTips(ティップス)記事をたくさん書いてますので、ぜひ見てみてください。(記事のタイトルに「Tips」と書いていたり「Tips」タグを貼ってあります)