スクラッチプログラミング - ボールのリアルな落下(らっか)・はねかえり
ボールがおちたり、バウンドしたり、だんだんゆっくりになったりするうごきを Scratch でつくります。はねかえりを色(いろ)で判定(はんてい)するので、応用(おうよう)のきくスクリプトになっています。
ボールのはねかえり運動(うんどう)
この記事(きじ)では、Scratch (スクラッチ)をつかって、ボールの自然(しぜん)なうごきをつくる方法(ほうほう)を紹介(しょうかい)します。
ボールのスピードや、バウンドのしやすさなどを簡単(かんたん)にかえられるスクリプトなので、はやくうごくボール、よくはねかえるボール、など、おこのみのボールをつくってみましょう。
サンプルプロジェクト
下(した)にあるのは、ボールがバウンドするサンプルプロジェクトです。記事(きじ)をよみすすめる前(まえ)に、ボールのうごきをみておいてください。

ボールをうごかす準備(じゅんび)
まずは、ボールをうごかすための変数(へんすう)をつくります。ボールの最初(さいしょ)の位置(いち)もきめておきましょう。
x速度(そくど):横(よこ)へうごかすための変数(へんすう)y速度(そくど):縦(たて)へうごかすための変数(へんすう)

今回(こんかい)は、マウスをおす、またはタップで、ボールをうごかします。ボールのむきとスピードは、「マウスがおされた位置(いち)」と「ボールの位置(いち)」から計算(けいさん)します。
- マウスがおされたら、ボールをうごかせるようにします。
- マウスがおされている間(あいだ)は計算(けいさん)しつづけて、マウスがはなされたらうごくようにします。
- マウスの位置(いち)とボールの位置(いち)から、
x速度(そくど)とy速度(そくど)を計算(けいさん)します。

ボールのはやさを調整(ちょうせい)するために、今回(こんかい)は、マウスの位置(いち)とボールの位置(いち)の差(さ)を 7 でわりました。うごきをはやくしたい場合(ばあい)は、たとえば 5 にしたり、おそくしたい場合(ばあい)は 10 にしてみてくださいね。
以上(いじょう)で、ボールをうごかすための準備(じゅんび)ができました。
上下(じょうげ)へうごかす
ここからは、ボールの縦(たて)のうごきをつくっていきます。ブロック定義(ていぎ)で 上下(じょうげ)へうごかす というブロックをつくって、うごきをまとめていきましょう。
- 「画面(がめん)を再描画(さいびょうが)せずに実行(じっこう)する」にチェックをいれてブロックをつくります。
- 重力(じゅうりょく)をあたえるために、
y速度(そくど)をつねにへらして下(した)へうごくようにします。

特定(とくてい)の色(いろ)にふれたら、はねかえるようにしましょう。ボールが上(うえ)へうごいている場合(ばあい)と、下(した)へうごいている場合(ばあい)で条件(じょうけん)をわけて、色(いろ)をとおりぬけないように、位置(いち)を調整(ちょうせい)します。

さきほど、「画面(がめん)を再描画(さいびょうが)せずに実行(じっこう)する」にチェックをいれてブロックをつくった理由(りゆう)は、この、y 座標(ざひょう)が 1 ずつ変化(へんか)する様子(ようす)をみせずに、色(いろ)のはしピッタリではねかえるようにみせるためです。
つづけて、うごいてきたむきとは逆方向(ぎゃくほうこう)へバウンドするようにします。-0.8 をかけた値(あたい)を y速度(そくど) に指定(してい)しましょう。

ここでつかっている 0.8 という値(あたい)は、反発係数(はんぱつけいすう)というものです。これは、モノのはねかえりやすさをあらわします。
0にすると、ピタッととまります。0.3にすると、鉄球(てっきゅう)のような、はねかえりにくいモノになります。0.9にすると、スーパーボールのような、よくはねかえるモノになります。1にすると、永遠(えいえん)にバウンドしつづけます。
ここまでで、ボールを縦(たて)へうごかし、特定(とくてい)の色(いろ)にふれたらバウンドするうごきができました。
左右(さゆう)へうごかす
次(つぎ)は、ボールの横(よこ)のうごきです。かんがえかたは、縦(たて)のうごきとほぼおなじですが、横(よこ)のうごきには重力(じゅうりょく)はない、という点(てん)がことなります。
- 「画面(がめん)を再描画(さいびょうが)せずに実行(じっこう)する」にチェックをいれてブロックをつくります。
- x 座標(ざひょう)は、変数(へんすう)におうじて変化(へんか)させます。

特定(とくてい)の色(いろ)にふれたら、はねかえるようにしましょう。ボールが左(ひだり)へうごいている場合(ばあい)と、右(みぎ)へうごいている場合(ばあい)で条件(じょうけん)をわけて、色(いろ)をとおりぬけないように、位置(いち)を調整(ちょうせい)します。

つづけて、うごいてきたむきとは逆方向(ぎゃくほうこう)へバウンドするよう、-0.8 をかけた値(あたい)を x速度(そくど) に指定(してい)しましょう。

以上(いじょう)で、ボールを横(よこ)へうごかし、特定(とくてい)の色(いろ)にふれたらはねかえるうごきができました。
うごきの微調整(びちょうせい)
さて、ここからは、ボールのうごきを微調整(びちょうせい)していきます。
今回(こんかい)、ボールをうごかす変数(へんすう)の値(あたい)は、-0.8 をかけたりするので小数(しょうすう)になります。そのため、うごく量(りょう)がすごくすくなくなってボールがとまりかけているときにも、カクカクとこきざみにうごいてしまいます。
このちょっとしたうごきをふせぐためのブロックを追加(ついか)していきましょう。上下(じょうげ)へうごかす と 左右(さゆう)へうごかす の下(した)に、次(つぎ)のようにブロックをつなげてください。
- うごく量(りょう)が
1よりちいさくなったら、変数(へんすう)の値(あたい)を0にして、うごきをとめます。

◯ のぜったいち をつかっているのは、変数(へんすう)の値(あたい)が「1 よりちいさい」だけでなく、「-1 よりおおきい」とき(-0.9 や -0.5 など)でも 0 になるようにするためです。これで、ボールのこきざみなうごきをふせげるようになりました。
次(つぎ)に、摩擦力(まさつりょく)を追加(ついか)しましょう。
地面(じめん)の上(うえ)を横方向(よこほうこう)へうごいているときに、ボールのうごきがだんだんおそくなるようにします。ボールが地面(じめん)の上(うえ)にある、ということは、縦(たて)のうごきがゼロのときです。上下(じょうげ)へうごかす の一番下(いちばんした)にブロックを追加(ついか)してください。
0.96をかけた値(あたい)をx速度(そくど)に指定(してい)します。

この 0.96 という値(あたい)は、モノと地面(じめん)がせっしているときの、すべりやすさをあらわしています。もっとよくすべるようにしたい場合(ばあい)は、0.99 などにしてみてくださいね。
以上(いじょう)で、上下(じょうげ)へうごかす と 左右(さゆう)へうごかす を定義(ていぎ)できたので、ずっと の間(あいだ)につなげておきましょう。

ペンでねらう
最後(さいご)に、ペンのスクリプトです。マウスのクリックまたはタップでボールをうごかすときに、ボールからマウスのところへ線(せん)がひかれるようにします。
あたらしいスプライトと、拡張機能(かくちょうきのう)のペンを追加(ついか)してから、ブロックをつなげていきましょう。
- 最初(さいしょ)に余計(よけい)な線(せん)がえがかれないよう、
ペンをあげるとぜんぶけすをつなげておきます。 - ペンの色(いろ)とふとさを指定(してい)します。

- ペンでえがくのは、マウスがおされている間(あいだ)です。ボールのところからマウスの位置(いち)まで線(せん)をひきます。
- マウスがはなされたら、線(せん)をけします。

スクリプト完成(かんせい)
自然(しぜん)なうごきをするボールのスクリプトが完成(かんせい)です。


Scratch の Pyxofy ページへいって、実際(じっさい)にボールをうごかしてあそんでみてください。Scratch ボールバウンド by Pyxofy

「きょうからはじめるスクラッチプログラミング入門」by Pyxofy
Pyxofy から Scratch の基本をまとめた電子書籍を出版しました。
Apple Books・Kindle でご購入ください。
まとめ
今回(こんかい)は、Scratch でボールが自然(しぜん)に落下(らっか)したりバウンドしたりするスクリプトをつくりました。
リアルなボールにするためには、はねかえりやすさや摩擦力(まさつりょく)も計算(けいさん)にいれてうごかします。スピードやバウンドのしやすさ、すべりやすさなどをすきなようにかえてみて、ボールがどのようにうごくか、いろいろためしてみてくださいね。
最後まで読んでいただき、ありがとうございます。この記事をシェアしてくれると嬉しいです!
SNS で Pyxofy とつながりましょう! LinkedIn・ Threads・Bluesky・ Mastodon・ X (Twitter) @pyxofy・ Facebook



