2018年2月21日水曜日

Scratchでプログラミング その17 メッセージを利用して変数をプライベート変数にする

Scratchの使い方解説です、今回の難易度はNormal
ここまでの記事を使うので、部分的に読んでもわからないかもです。

記事をまとめたページはこちら。

前回解説しましたが、グローバル変数を使うことは出来るだけ避けたほうが良いです。
今回はこれまでの動作をメッセージを利用することで代用してみようと思います。
メッセージを利用することで全体の処理がわかりやすくなります。

0.目次

  1. グローバル変数を削除
  2. ダメージ受けたときのメッセージを追加
  3. メッセージを受け取る

1.グローバル変数を削除

ここまで、当たり判定では「プレイヤー」に登録した変数Lifeを利用しています。

これはこれで良い様な気もしますが、プレイヤーの操作のなかではライフ計算までしないと考えることにしてみます。
つまり、プレイヤーに書くコマンドは、あくまで、プレイヤーの動きに関わることだけをコマンドに設定しよう
ということです。うぅむ、説明が難しい。

とりあえず!ライフの計算とゲームオーバーについてのコマンドを削除します。

まずはプレイヤーのコマンドに含まれていたLifeの初期設定を消します。


当たり判定からもLifeの計算部分を消します。


最後にデータの「Life」を右クリックで削除します。


Lifeを削除しました。

Lifeについてのコマンドを削除したので、いまは敵に当たってもライフが減らない状態です。


2.ダメージ受けたときのメッセージを追加

次にこれまでの変数Lifeの変わりにメッセージを使用します。

プレイヤーの当たり判定のコマンドにイベントの「○○を送る」を追加します。


コマンドは新しいメッセージを作成して使用します。
イベントの「○○を送る」をクリックして「新しいメッセージ」を作成します。


メッセージは「ダメージを受けた」という名前にしました。
 

これで、プレイヤーは「ダメージを受けた」というメッセージを送るだけで、そのあとの処理には関係なくなります。
以前のコマンドと比べても、プレイヤーのコマンドが単純になりました。


3.メッセージを受け取る

今度は「残りライフ」のスプライトに「ダメージを受けた」というメッセージを受け取る処理を追加します。


まずはプライベート変数としてのLifeを追加します。
これまで使用していたLifeはどのスプライトからでも使用可能なグローバルな変数として作成されていました。

今回は「残りライフ」のスプライトにのみ使用される変数として「このスプライトのみ」で変数を作成します。


変数Lifeをコマンドに追加しました。

これまで「プレイヤー」のスプライトに書かれていた変数Lifeの初期設定を追加しています。

ただし、ここまでのコマンドの修正で「プレイヤー」に設定していたライフを減らす処理を消しているので、敵にぶつかってもライフが減らなくなっています

「1.」では、「プレイヤー」はライフを減らす代わりに「ダメージを受けた」というメッセージを送るように修正しました。
「残りライフ」のスクリプトではそのメッセージを利用します。


イベントの「ダメージを受けた」を使って、新しいブロックを追加します。
まず、ダメージを受けたので変数Lifeを減らします。
その後にクローンの削除判定を追加します。
クローンの削除する判定は、もともと「クローンされたとき」で使用していたものを利用しています。

最後にLifeがなくなったときに「すべてを止める」ようにしています。


これで、メッセージへの置き換えが完了しました。

動作は変わらないですが、それぞれのコマンドが独立して、読みやすくなっていると思います。