すでに『ブロック崩し パドルにボールをめり込ませないようにきれいに跳ね返す方法』というタイトルで、パドルがボールをきれいに跳ね返す方法について記事を書きましたが、跳ね返る角度は単純なものでした。
単純な方法なので同じ場所に当たれば同じように跳ね返ることになり、場合によってはボールが同じ四角形を描きつづけてグルグル回ってしまい、ゲームが終わらなくなる可能性も考えられました。
そこで今回は、ブロック崩しでよくあるテクニックを使って、ボールがパドルに当たっときの跳ね返り方を工夫してみます。
この方法を使うと、ある程度跳ね返す方向の予測もできるので狙い撃ちができるようになります。
この記事を読んでいただくと、パドルがボールを跳ね返し方について、本物のゲームと同じような動きを再現するスクリプトの作り方が分かります。
スクリプトの作り方
完成した動き
ひと言でいうと、パドルの図形の中心点を中心に、放射状に跳ね返すような動きにしています。
パドルの真ん中付近にボールが当たったときは真上方向に跳ね返し、パドルの右側に当たったら右方向へ、パドルの左側に当たったら左方向へ跳ね返します。
また、パドルの左右の端へ近づけば近づくほど、急角度で跳ね返すようになってます。
実際のゲームでも、パドルの真横付近にボールを当てると水平に近い形で跳ね返してくれますよね?それと同じような動きになります。
完成したスクリプト
完成したスクリプトの全体です。スプライトはパドルとボールの2つです。
【パドルのスクリプト】
【ボールのスクリプト】
スクリプトの説明
ポイント①:初期化処理
初期設定などだけなので特に説明は不要だと思います。
【パドルのスクリプト】
パドルのスクリプトはこれ以外にはありません。
【ボールのスクリプト】
ポイント②:パドルに触れたら向きを変える★重要★
【ボールのスクリプト】
この部分(上図赤枠)が、跳ね返る角度を決める最重要ポイントです。
ボールがパドルに触れた瞬間に最初にやることは「パドルへ向ける」です。
つまり、ボールの向きをパドルの図形の中心に向けます。
こうすると、ボールがパドルのどの位置に当たったとしても、まずはパドルの図形の中心点に方向が変わります。
その次に「(ボールの現在の向き)+180度」に向けます。
こうすることで、ボールとパドルの中心点を結ぶ線上で反対方向に向きが変わります。
つまり、跳ね返る方向が決まります。
図で表すとこのようになります。パドルの中心とパドル図形の中心が一致した場合です(詳細は後述しますがここも重要ポイントです)。
ポイント③:パドルから離れるまで動かす
別の記事で説明済みなので省略します。まとめの章にリンクを載せましたので詳しくはそちらをご覧ください。
【ボールのスクリプト】
ポイント④:パドルに触れてない間の動きも忘れずにつくる
スタート直後やパドルに触れていない間も動き続ける必要があるので、この部分のスクリプトも忘れずに作らなければいけません。
【ボールのスクリプト】
ポイント⑤:パドルの中止点を少し上にずらす★重要★
パドルのコスチューム画面に移って、パドルの中心点を図形全体の中止点から少し上にずらしてください。
こうすることで、真横からボールが当たった時の対策になります。
このようにずらさないと、(おそらくそのようなボールの軌道はありませんが)真横からボールが当たったときに真横に跳ね返ることになってしまい、永遠にゲームが終わらなくなってしまいます。
そうならないように必ず角度をつけるために、パドルの中心点と図形全体の中心点をずらしておきます。
これらのスクリプトブロックを作れば、パドルで跳ね返る動きの工夫は完成です!
失敗しやすいポイント
今回は失敗しやすいポイントは特にありません。
応用編
ブロック崩しに応用するとこんな感じになります。
ボールがパドルに当たったときの跳ね返る方向とその軌道については、雰囲気が出ているのではないでしょうか?
この例では、ブロックに触れたときのプログラムをまともに組んでないので変な動きをしている箇所があります。(それについてはまた別の機会に修正して紹介したいと思います)
まとめ
さいごに、本物のブロック崩しゲームと同じようにパドルがボールを跳ね返すスクリプトの作り方のポイントをまとめます。
- ポイント①:初期化処理
- ポイント②:パドルに触れたら向きを変える
- ポイント③:パドルから離れるまで動かす
- ポイント④:パドルに触れてない間の動きも忘れずにつくる
- ポイント⑤:パドルの中止点を少し上にずらす
どうでしたか?上手くできたでしょうか?
他にも役に立つTips(ティップス)記事をたくさん書いてますので、ぜひ見てみてください。(記事のタイトルに「Tips」と書いていたり「Tips」タグを貼ってあります)