クローンを使って、ビームを作った時に「アレっ?」というトラブルが起こったことはありませんか?
今回「思った通りに動かないので直し方を教えて欲しい」という相談を受けたので、解決策を書こうと思います。
クローンを正しく使えるようになると、もっともっと楽しくなりますよ!
ビーム作成時のトラブル
「ネコが上下に移動、(スペースキーで)ビームを発射、クマに当てる」というゲームなのですが、上の画像をみると、様々な問題が発生しています。
実際のコードを見てみます。
ネコのコード
上下左右に矢印で移動するコードですね。
こちらは問題なさそうです。
ビームのコード
上下左右に移動してネコに付いていきながら、スペースキーを押すとクローンを作成、右に移動していくコードですね。
トラブルが発生している原因は、このコードにありそうです。
ビームの連射を制限する
まずは「スペースキーを押している間、ずっとビームが発射されてしまう」という問題を解決します。
「もしスペースキーが押されたなら」のブロックの中に以下のように設定します。
「スペースキーが押されたではないまで待つ」というのは言い換えると「スペースキーを一度離すまで次のビームが出ない」という処理です。
しかし、今度は別の問題が発生しました。
「待つ」を使用することで、処理時間にズレが発生し、ネコの位置とビームの位置がズレてしまいました。
そこでビームのコードを大きく変更しようと思います。
同じコードはなるべく使わない
今回の記事の内容から少し逸れますが、大切なことなので敢えて書こうと思います。
ビームが移動するコードは、ネコのコードと同じものが使われていますが、クローンの処理を変更したことで、ビームとネコがズレるようになってしまいました。
プログラミングでは「なるべく同じコードを書かずに、使える情報を利用する」ということが、とても大切です。
そこで、ビームの位置は、矢印での操作を削除して、ネコの位置情報を利用して発生させるようにします。
クローンされたときに「ビームをネコの場所へ行く」ようにします。
それだけでは、ネコの体からビームが出てしまうので「x座標とy座標を調整」して、手から出ているような見た目にします。
クローンを削除する
ビームを発射する設定はうまくいったので、最後に「クマに当たったとき」と「右端に当たったとき」にビームを消すようにします。
そのためには以下のように設定します。
「クローンされたとき」をふたつに分けたのは、処理が重なって問題が発生することを防ぐためです。
これで、ビームの連射に関するトラブルは解決しました。
「ビームが出なくなる」という問題も、コードを処理の負荷が少ないものに書き換えたことで解決しています。
まとめ
クローンを使った「ビーム連射」を作成した際に起こった問題を解決しました。
スクラッチでは、ゲームを作るだけでなく、作っていく中で起こったトラブルを解決することも楽しさのひとつです。
また、その中で無駄なコードをキレイにまとめるなど、工夫を凝らしていくことで、プログラミングのスキルがどんどん上達していきます。
問題の解決には時間が掛かることもありますが、諦めずに頑張っていきましょう!
コメント