広告

【Scratch】【ブロック崩し】6日目 跳ね返りを工夫その1

2022.10.10更新

【Scratch】【ブロック崩し】のタイトル画像になります

Scratch(スクラッチ)を使って入門プログラムの定番、ブロック崩しを作っていきます。

ブロック崩しを通してたくさんのプログラムの組み合わせ方、キャラクターの移動方法、簡単な場面の切り替えなどを学んでいきます。

「Scratch(スクラッチ)でプログラミング入門」の応用編になりますので、まだ終えてない方はそちらを先にご覧ください。

跳ね返りを工夫する

りんごとボールの跳ね返りが単調なのでちょっと工夫してもう少しマトモに跳ね返してみたいと思います。

手順としてはボールがりんごのどこに当たっているのかをボールとりんごとの角度を調べる事によって特定

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像1

その位置によって

角度0らへんの時・・・x増加量のみ反転

角度45らへんの時・・・x,y増加量反転

角度90らへんの時・・・y増加量のみ反転

角度135らへんの時・・・x,y増加量反転

角度180らへんの時・・・x増加量のみ反転

角度225らへんの時・・・x,y増加量反転

角度270らへんの時・・・y増加量のみ反転

角度315らへんの時・・・x,y増加量反転

のように8パターンに分けて跳ね返りをするように変更します。

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像2

手始めにボールとりんごとの角度を調べるブロックを作っていきます。

atan

ではどのようにりんごとボールの角度を調べるのか?という話なのですが、これには「atan(アークタンジェント)」というブロックを使えば2つの座標を入れるだけで簡単に角度を調べる事ができます。

調べられるのですがっ!

座標の場所によってはちょっとおかしな結果になるのでそのへんを考えつつ「atan」を使って2つの座標から角度を調べるブロックを自作していきます。

「ボールにふれたとき」にこのブロックを使ってお互いの角度を調べてどのへんに当たっているのかを特定します。

私はそこまで数学に詳しいわけではないのでだいぶ強引に作っていきますので、そのへんは目をつぶってください。

atanを使って角度を調べる

前段階としてまずは「atan(アークタンジェント)」を使って角度を調べてみます。

今までのプログラムと一緒に作るとごちゃごちゃしてわかりづらくなると思いますので練習がてら「新規作成」して作ってみたいと思います。

今までのプログラムを忘れずに保存してファイルメニューから「新規」を選択、空のプロジェクトを作成、ボールのスプライトを追加してネコちゃんの座標を表す「ネコx,ネコy」、ボールの座標を表す「ボールx,ボールy」という名前の変数をすべてのスプライト用で用意してください。

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像3

ではプログラミングしていきます。

ボール

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像4

「ずっと」を使って現在の「x,y座標」を先ほど用意した「ボールx,ボールy」に保存します。

これで他のスプライトからもボールの座標が「ボールx,ボールy」を通して確認できるようになります。

ネコちゃん

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像5

ネコちゃんも同じように座標を変数に保存した上で「atan」の登場です。(atanは演算ブロックの一番下「~の絶対値」ブロックの中にあります!)

(ネコy - ボールy) / (ネコx - ボールx)のatan

計算記号、計算順序などを間違えないようにブロックを作ってください。

これでひとまずネコちゃんから見たボールの角度を調べるプログラムが出来上がりました!

それではプログラムを実行して「0度」から反時計回りにボールを動かして角度を確認してみます。

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像6

右真横が「0度」になります。

そのまま反時計回りに動かして・・・、

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像7

「30.11度」

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像8

「45度」

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像9

「59.89度」

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像10

「89.43度」

このあたりまでは問題なく角度を調べる事ができます。

問題はここからです。

続けて反時計回りに動かします。

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像11

「-90度」

角度がマイナスに入ってしまいました。

さらに続けてみます。

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像12

「-45度」

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像13

「-0.57度」

どうやら-90度→0度に向かってるようです。

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像14

左真横の時点でまた「0」に戻ってきてしまいました!

さらに調べてみます。

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像15

「0.57度」

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像16

「45度」

今度はまた「0度→90度」に向けて進んでいくようです。

まとめると

「0度~89度の場所」・・・問題なし

「90度~179度の場所」・・・-90~-1

「180度~269度の場所」・・・0~89

「270度~359度の場所」・・・-90~-1

のように角度が変化しているのが確認できるかと思います。

バラバラなようで規則性がありますね。

という事は!

この結果に少し手を加えれば期待する数字になりそうです。

「0度~89度の場所」・・・変わらず

「90度の場所」・・・90にする

「91度~179度の場所」・・・180を足す

「180度の場所」・・180にする

「181度~269度の場所」・・・180を足す

「270度の場所」・・270にする

「270度~359度の場所」・・・360を足す

ざっとこんな感じですかね。

場所はお互いの座標の位置関係によって割り出します。

プログラミング

ではプログラミングしてみましょう。

今度は新規作成ではなく前回までの続きに加えていきます。

角度を入れる為の変数「角度」をすべてのスプライト用で用意してください。

そして「りんご」にプログラムを加えていきます。

ブロックを作るメニューからブロック作成画面に移動、次の内容でブロックを作ってください。

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像17

名前は「atan2」にしてみました。

「x1,x2,y1,y2」には調べたい2つのスプライトの「x,y座標」が入ります。

角度を調べてその結果を変数「角度」に保存します。

では内容です。

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像18

「atan」でひとまずの角度を調べてあとはお互いの座標の位置関係によって相手のスプライトがどのあたりにいるのかを調べてさきほどまとめた修正部分を加えます。

【Scratch】【ブロック崩し】跳ね返りを工夫その1の説明画像19

前半部分です。

ちょっと長いのであとはプログラム全体をご覧ください。

中間プログラム5(atan2)

りんごのプログラムに加えるカタチで作ってください。

今回はこのあたりで次回はこのブロックを実際に組み込んでいきます。

次回

7日目(最終日) 跳ね返りを工夫その2

広告

Copyright 2016 K.N/petitetech.com