Scratch2(スクラッチ2)で壁打ちゲームを作ろう(2回目)
myway@おじさんです。
前回の続きで、「Paddle」で「Ball」をはね返すスクリプトを作ります。
注意点として、角度の計算をしますので、角度がわからない人は難しいと思いますが、勉強してみても良いかも知れません。
動作環境について
OS:MAC OS X(Windowsでも操作はほとんど変わりません)
エディタ:Scratch offline editor(ver.456)
1.準備
前回保存したプロジェクトを開いて下さい。
画面右上の「ファイル」をクリックしてから、「ひらく」をクリックして、プロジェクトを開いて下さい。
2.「はね返す」には?
Scratchには、「スプライトに当ったらはね返える」ブロックはありません。
(「はしにあたったらはねかえる」ブロックはありますが)
よって、その部分をスクリプトで作る必要があります。
いつも通り、そのままスクリプトを出してもいいのですが、少し、考えてみます。
まず、「Ball」が「Paddle」にあたったら、どのようなうごきをするのかを考えてみます。例えば、
や
といった動きになると思います。
ようは、「Paddle」にあたった時の角度によって、移動する向きが変わるという事です。
では、どうするのかというと、この角度は計算で出す事ができます。
では、下の画像で考えてみます。
左から右へ移動する場合です。
例えば、1の「Ball」の向きが「135」だった場合、「Paddle」に当って跳ね返った2の「Ball」の向きは「45」となります。
他の例として、1の「Ball」の向きが、「110」だった場合、「Paddle」に当って跳ね返った2の「Ball」の向きは「70」となります。
(なぜそうなるかは、とても難しくなるので、省略します。)
ここで、ある法則がある事に何か気づきますか?
1の「Ball」の角度と、「Paddle」に当ったあとの2の「Ball」の角度を足すと「180」になるという法則です。
式で表すと、
「135+45=180」
となります。
では、逆の右から左も考えてみましょう。
「Paddle」に当たる前の1の「Ball」向きが「225」だった場合、「Paddle」に当ったあとの2の「Ball」の向きは「315」になります。
この場合の式で表すと
「225+315=540」
ここから、この式を変換します。
角度は、「360ど」と「0ど」は同じ角度ですので、下の式のように変換できます。
「225+315=360+180」
これだと、わかりにくいので、「=」の右と左、それぞれ360を引いてみます。
「(225+315)-360=360+180-360」
→「(540)-360=180」
→「180=180」
→「135+45=180」
見覚えのある式になりました。
ただし、このままでは、プログラムとしてスクリプトには書けません。
3.スクリプトに書けるようにする
では、スクリプトに書けるようにするにはどうすれば良いか考えます。
プログラム全般に言える事ですが、「答え」が「=」の右にくるように式を考えないといけません。
上では、
「135+45=180」
という式を書きましたが、「=」の右は「180」となっています。
この「180」は「答え」でしょうか?
プログラムとしては「いいえ」となります。
今、知りたい答えは「45」が知りたい答えです。
なので、式を変換して、答えが「45」になる式を考えないといけません。
では、変換してみます。
「135+45=180」
から、「=」の右と左、それぞれ「135」を引きます。
「135+45-135=180-135」
→「45=180-135」
「=」の右と左の値を入れ替えます。
「180-135=45」
これで変換ができました。
ちなみに、変換方法は「一次方程式(いちじほうていしき)」をつかって変換しています。
知らない人は、一度調べてみてください。
4.スクリプトを書いてみる
では、スクリプトは下のようになります。
ずっとブロックの中に「もしPaddleにふれたなら」ブロックを追加しています。
それと、「もしPaddleにふれたなら」ブロックの中には、先ほど考えた式を入れて、向きを変えています。
では、緑のはたをクリックしてうごかしてみましょう。
「Ball」が「Paddle」に当ったらはね返えると思います。
今回はここまでです。
作ったら、必ず、「ほぞん」をするように心がけて下さい。
それと、今回も動画がありますので、よければ、参考にしていただければと思います。
実は、今回のスクリプトは完成ではありません。
動かしているうちにわかると思いますが、「Paddle」に当たる場所によって、「Ball」が「Paddle」の中を移動してしまいます。
次回は、その原因と対応方法について書きたいとおもいます。
最後まで読んで頂いてありがとうございます。
皆さんに少しでもお役に立てれば幸いです。
<<壁打ち(1回目) | 壁打ち(3回目)>> |