プログラムを別の書き方で
今回は、前回と同じ矢印キーでキャラクターを動かすスクリプトを、別の書き方で作ってみようと思います。
イベントを使ったスクリプト(前回のスクリプトのおさらい)
前回は『キーを押す』というきっかけ=イベントによって、押したキーに応じた動きをするスクリプトが起動するようになっていました。
『右向き矢印キー』が押されたら『キャラクターが右に1歩動く』
『左向き矢印キー』が押されたら『キャラクターが左に1歩動く』
『上向き矢印キー』が押されたら『キャラクターが上に1歩動く』
『下向き矢印キー』が押されたら『キャラクターが下に1歩動く』
という、4つのスクリプトを別々に作成しました。
これらは、『キーが押されたとき』に発動して、すぐに終了するようになっています。
制御ブロックを使ったスクリプト
今回はほぼ同じ機能を、別の書き方で実現します。
早速ですが、『右向き矢印を押した場合』のスクリプトを書いてみます。
前回のスクリプトと異なり、単純にブロックを上から下に向かって実行するのではありません。このスクリプトでは、実行する順番を変える『制御』ブロックを2種類使用しています。
『ずっと』ブロックで繰り返す
まず繰り返しに使うブロックです。
このブロックは、中に挿入されたスクリプト(ブロック/ブロックの塊)を繰り返し実行します。『ずっと』とあるので、停止ボタンでスクリプト全体が停止するか、または何らかの方法で中のスクリプトが終了しない限り永久に繰り返し実行が続きます。
繰り返しに使えるブロックは、他に『〇回繰り返す』ブロックがあります。こちらの場合は回数の指定が可能です。
『もし〇なら』ブロックで分岐する
もう1つ、分岐のためのブロックです。
これも繰り返しと同じくC型ブロックです。
『もし〇なら』の〇の部分(条件)には、真偽ブロックを当てはめます。
真偽ブロックに書かれた条件が成り立っていれば中に挿入されたスクリプトが実行され、成り立っていなければ挿入されたスクリプトは実行されずにそのまま先に進みます。
分岐のためのブロックには、スクリプトを挿入する凹みが2つあるものもあります。
これは、『もし〇なら』に当てはめた真偽ブロックの条件が成り立っていれば上の凹みに挿入されたスクリプトが実行され、成り立っていなければ下の凹みに挿入されたスクリプトが実行されます。
『右向き矢印を押した場合』のスクリプト
まず1歩動かす
それでは、『右向き矢印を押した場合』のスクリプトを見ていきましょう。
まず中心になるのはこの部分です。
『制御』の『もし〇なら』ブロックに
『調べる』の『右向き矢印キーが押された』ブロックをはめてあります。
※『右向き矢印キーが押された』ブロックは、ブロックパレットでは『スペースキーが押された』になっています。『▼』をクリックして『スペースキー』部分を変更して使います。
これで、『右向き矢印キーが押された』場合に、挿入されたスクリプトが実行されます。
中に挿入されたスクリプトは『次のコスチュームにする』と『x座標を10ずつ変える』で、歩くアニメーションをしながらスプライトで10だけ右へ移動します。
繰り返し動かす
これだけだと1回動いたら終わりになってしまうので、『ずっと』の中に挿入してなんども『右向き矢印キーが押されたら10だけ右に移動する』を繰り返すようにします。
そのままだとものすごく速く動いてしまうので、1回動くたびにちょっと(0.2秒)だけ待つようにします。
これで一応完成です。一番上に『が押されたとき』を追加してテストしてみましょう。
この実行例では右向き矢印キーを連打しているのではなく数秒間押しっぱなしにしているのですが、Scratchキャットは一定のペースでトコトコと歩いて行きます。
実は前回のイベント式だと、矢印キーを押しっぱなしにするとキーを押した瞬間に1回動いて一瞬止まり、その後に連続してトコトコと動く、という動作でした。これはおそらくキー入力時のリピートと同じ動作だと思います。
しかし今回のスクリプトではキーを押した瞬間から一定のペースで動いていきます。こちらの方がゲームは作りやすいですね。
全方向に対応する
『左向き』の動きを追加します。少し複雑ですが、以下のように変更しました。
今回は一度に1つの矢印キーにしか反応しないようにするため、『もし〇なら~でなければ~』で順に繋げていきます。たとえば
また、前回のイベント式と同様、右向きと左向きでスプライトの向きを反転するようにします。
『0.2秒待つ』はすべての矢印キーが押された場合の判断が終わった後に移動しています。
同様に、上下方向も追加します。
最後に、『が押されたとき』のすぐ下に初期位置・初期角度を設定するブロックをつけます。
それでは動作させてみましょう。
コメント