
複数のスプライトを使って一緒に走ることはできますでしょうか?
まだできない人がいたらしたの記事を参考にしてみてください。
今回はそれぞれのスプライトの走る速さを変えてみたいと思います。
どっちが早くゴールするのかわからないようにしてみましょう。
早くゴールをする方を当てるゲームなどすると面白いかもしれませんね。
それではチャレンジしてみましょう!
目次
変数を作ってスプライトを走らせよう!
走る速さを変えるためには変数を使ってみましょう。
変数とは文字通り変わる数です。
数字(正確には数字だけではないです)の入れ物を作ってあげていろんなところで使うことができます。
変数について詳しく知りたい人はしたの記事をみてください!↓
変数を作ってみよう!
まずは『速さ』という変数を作ってみましょう。
変数は『すべてのスプライト用』と『このスプライトのみ』の2つが用意されています。
『すべてのスプライト用』の場合は変数名の最初に『@』をつけます。
『このスプライトのみ』の場合は変数名の最初に『$』をつけます。
これはルールなのであまり深く考えずに覚えちゃいましょう。
どちらかを使うかは状況によるのですが基本的には影響が小さくなるように作るのが良いとされています。
なので「あきらかにこのスプライトでしか使わない!」ということがわかっていれば『$』を使うようにしましょう。
Rubyのタブを開いて『$cat_speed = 20』を猫のスプライトに追加しましょう。
追加するのは『move(10)』の上におきます。
これで『cat_speed』とという変数が作成されます。
変数を使ってみよう!
作った変数を『10歩動かす』の10の部分と入れ替えてみましょう。
self.when(:flag_clicked) do go_to([-150, 50]) sleep(2) until touching?("_edge_") $cat_speed = 20 move($cat_speed) end end
この状態で動かしてみましょう。
変数の値が反映されて走るのが速くなりましたね。
乱数を使って走る速さを変えてみよう!
変数を使ってスプライトを走らせることができました。
ただ走る速さが変わらないので面白くないですね。
『乱数』を使って走る速さを変えてみましょう。
乱数を使うには『rand(1..10)』という命令を使います。
randはランダムの意味です。
カッコのなかが1~10の値を使ってねと設定しています。
なので『rand(1..10)』とすると1~10の値が規則性なく取得することができます。
『$cat_speed』に対して乱数を設定してみましょう。
self.when(:flag_clicked) do go_to([-150, 50]) sleep(2) until touching?("_edge_") $cat_speed = rand(1..10) move($cat_speed) end end
どう動くでしょうか?
いい感じに動いてますね。
同様の内容を犬のスプライトにも設定してみましょう。
設定が終わったら緑のはたを押してみましょう!
いい感じに競争してくれますね。
スプライトの絵に動きをつけてみよう!
スプライトを競争できるようになりましたね。
もう1つ面白いことをやってみましょう!
今走っている時にスプライトに動きがなくて少し寂しいですね。
躍動感が出るようにスプライトに動きをつけてみましょう!
動きをつけるには『コスチューム』を使います。
コスチュームにはさまざまなスプライトの形を登録できます。
『次のコスチューム』ブロックで動きをつけてみよう
コスチュームを変更するには『next_costume』を使います。
残念ながら猫にはコスチュームが一つしかありませんので犬のスプライトへの設定になります。
『next_costume』を『move($dog_speed)』の下にいれてみます。
self.when(:flag_clicked) do go_to([-150, -120]) sleep(2) until touching?("_edge_") $dog_speed = rand(1..10) move($dog_speed) next_costume end end
少し動きが速すぎますね、調整してみましょう。
コスチュームの変化の速さを調整してみる
コスチュームの変化の速さをもう少しゆっくりしてみましょう。
ゆっくりするには『sleep』を使って止めてみましょう。
1秒だとゆっくりになりするので0.1にしましょう。
self.when(:flag_clicked) do go_to([-150, -120]) sleep(2) until touching?("_edge_") $dog_speed = rand(1..10) move($dog_speed) next_costume sleep(0.1) end end
『sleep(0.1)』を追加したらスプライトを動かしてみましょう。
いい感じに動いてますね、もう1つのスプライトにも同様に『sleep(0.1)』を追加しておきましょう。
追加が終わったら緑のはたボタンをクリックしてみましょう!
競争している感がよく出ていていいですね!
どちらが先にゴールがわかりやすくするために音を鳴らすなどを最後に追加してあげるとわかりやすくなります。
別のスプライトを追加してみたりもう少し速さを変更してみたりと色々と試してみましょう!