今度は、舞台や役者を動かすための台本作りです。基本図形編集で作ったセグメントを組み合わせて、芝居を進行させます。以降、台本のことを「スクリプト」とよぶことにします。
「SCRIPT:サンプル1」の仮身を開くと、基本文章編集のウィンドウが開きます。ここにスクリプトを書いていきます。
■スクリプトの全体
以下にスクリプトの全体を掲載しました。1行ずつ説明していきましょう。説明に便利なように行番号がついていますが、実際にはこの数字を入力する必要はありません(図14)。
01: VERSION 3
02: PROLOGUE
03: CALL オープニング()
04: END
05: FUNC オープニング()
06: SCENE レンガ
07: SLEEP 500
08: APPEAR ようこそ
09: SCENE レンガ,ようこそ,下線 : WIPE_R 100
10: SCENE レンガ,ようこそ,下線,黒背景,社名 : WIPE_L 100
11: END
12: ACTION もう一度() CLICK レンガ
13: CALL オープニング()
14: END
15: ACTION 社名を揺らす() CLICK 黒背景
16: MOVE 社名 : -20 0 #社名を左右に一回揺らす
17: SLEEP 20
18: MOVE 社名 : 40 0
19: SLEEP 20
20: MOVE 社名 : -20 0
21: END
単語と単語の間の空白になっている所は、1つ以上の空白、またはタブが入っている必要があります。たとえば、2行目の「CALL」と「オープニング」の間がこれにあたります。逆に余計な空白やタブがいくつ入っていてもかまいません。
「#」以降の文字は無視されます。いわゆるコメントの記述に使います。15行目がその例です。
■自分でつける名前は日本語で
スクリプトの中で、英字になっているものは、マイクロスクリプトへ動作を指示する部分です。「命令」とか「文」とよばれます。たとえば、PROLOGUE文とかACTION文などというように「文」という言葉を使います。
逆に日本語になっているのは、スクリプトを書く人が決める名前です。もちろん必ずしも日本語にする必要はありません。「レンガ」の代わりに「RENGA」などとしてもかまいません。しかし、自分でつける名前は日本語で表記することをぜひお勧めします。スクリプトへの命令とそうでない部分が一目で区別でき、読みやすさが格段に増します。
■VERSIONを書く
◇VERSION 3(1行目)
マイクロスクリプトの1行目には、必ずVERSION 3を書きます。これにより、マイクロスクリプトの全ての機能が使えるようになります。
VERSION 2と書かれたスクリプトも存在し、超漢字Vでも動作します。VERSION 2とVERSION 3とでは、文字セグメントの書体の取り扱いに違いがあります。VERSION 2では、あらかじめ設定された文字セグメントの書体設定は実行時には無視されますが、VERSION 3では、文字セグメントの書体設定実行時に反映されます。
VERSIONを書かないと、以前のバージョンのマイロスクリプトとして動作し、エラーにはなりません。ただし、以前のバージョンのマイロスクリプトの文法は、現在のマイクロスクリプトとかなり異なるため、文法的に正しく書かかれたVERSION 3/2用のスクリプトでも、エラーが発生し、正しく動作しないことがあります。
■まず最初に、PROLOGUE~ENDの間が実行される
◇PROLOGUE~END(2~4行目)
マイクロスクリプトは、まず最初にPROLOGUE文~END文で囲まれた箇所を実行します。ここでは、その中味は「CALL オープニング()」だけです。このCALL文によって、手続き「オープニング()」を呼び出し、その本体を上から順に実行していきます。手続き「オープニング()」の本体は5~11行目にあります。手続きは、FUNC文~END文で囲まれた文の集まりです。
PROLOGUE文~END文やFUNC文~END文の間は、数文字分字下げしてあります。こうしておいても、スクリプトの動作には影響しませんが、スクリプト全体の構造が一目で把握しやすくなります。これもお勧めしたい書法です。
■SCENE文とAPPEAR文を使って場面を表示する
◇「SCENE レンガ」(6行目)
図2から図7への場面変化は、手続き「オープニング」で記述しています。PROLOGUE文~END文は、この手続きを呼び出しているだけですので、実際にこのマイクロスクリプトのプログラムが起動されて最初に実行される文は、「SCENE レンガ」です。
SCENE文は、指定したセグメントを左上に詰めて表示する働きをします。つまり、この文によって図2が得られます。左上に詰められるので、セグメント「レンガ」は、基本図形編集のウィンドウのどこに置いておいてもかまいません。
◇「SLEEP 500」(7行目)
次に、「SLEEP 500」を実行します。SLEEP文は、指定した時間だけ待ちます。ミリ秒単位での指定です。この場合、500ミリ秒、つまり0.5秒間スクリプトの動作が止まります。それが経過すると、次の8行目の実行に移ることになります。
◇「APPEAR ようこそ」(8行目)
8行目は、「APPEAR ようこそ」を実行します。APPEAR文は、その場所に指定したセグメントを表示します。これで図3が得られます。最近に実行したSCENE文のセグメントが座標の基準になります。ここでは、セグメント「レンガ」が基準となります。セグメント「ようこそ」は、セグメント「レンガ」の位置関係を保った位置に現れます。
◇「SCENE レンガ ようこそ 下線 :WIPE_R 100」(9行目)
図3から、図4を経て図5へ移る変化は、「SCENE レンガ ようこそ 下線 :WIPE_R 100」の1つの文だけで記述されています。5行目と同じSCENE文を使っていますが、「:WIPE_R 100」という特別な指定がついています。これは、表示効果(エフェクト)の指定です。
SCENE文は、それまで表示されていた(古い)セグメントをすべて消して、新しい画面を表示します。このとき、古い画面を一度に消すのではなく、古い画面から少しずつ新しい画面に移ることができるのです。そのときの表示効果を指定しているのが、「:WIPE_R」です。これは、左から右の方向へ紙をめくって、下にある紙を序々見せるかのようにして次の画面へ移ることを示しています。「100」という指定は、その画面の転換にかけるステップ数です。数字が大きいほどゆっくり時間をかけて画面が移ります。
図4を経て図5へ移る様子を見ていると、下線を引く文を実行しているようにみえます。しかし、実際はそうではありません。図3と図5の違いは下線の有無だけです。そこで、そこだけが違うセグメント群(レンガ+ようこそ+下線)を、表示効果付きのSCENE文で表示させることにより、あたかも線を引いているかのように見せているのです。単純な方法ですが、かなりわかりやすいものです。
◇「SCENE レンガ ようこそ 下線 黒背景 社名 :WIPE_L 100」(10行目)
図5から図7への変化は、「SCENE レンガ ようこそ 下線 黒背景 社名 :WIPE_L 100」で記述しています。9行目とほとんど同じ内容です。「:WIPE_L」は、「:WIPE_R」とは逆に、右から左へめくれるように画面が移っていく指定です。
□
これで、手続き「オープニング」の処理がすべて終わります。この後、この手続きを呼び出した3行目に戻ります。そして、PROLOGUE文~END文の実行をすべて終了することになります。
■ユーザの操作に反応する手続きを書く
PROLOGUE~ENDの実行後は、マイクロスクリプト側からは、そのほかの文を何も実行しようとはしません。それ以降のスクリプトの動作は、ユーザの操作がきっかけになります。
†通常の手続き型言語ですと、プログラムを最初から追って行けば、プログラムの全体を把握できるのが普通です。一方、イベント駆動型プログラミングでは、最初からプログラムを追って把握できるのは、せいぜい初期化部分に過ぎません。残りの大多数のプログラム部分は、ユーザが画面を操作したといった、イベントの発生によって動作します。
12~21行目には、ユーザからの2種類の操作がきっかけとなる手続きが記述されています。12~14行目の手続き「もう一度」の記述の仕方は、5~11行目のものと似ています。違うのは、12行目の後ろに「CLICK レンガ」という指定があることです。この手続きの起動のされ方を日本語で表現するとこうなります。
『セグメント「レンガ」がクリックされたら、手続き「もう一度」を実行せよ』
手続き「オープニング」は、「CALL オープニング」という文によって実行されます。一方、手続き「もう一度」は、『ユーザがセグメント「レンガ」をクリックする』ことにより実行されます。
マイクロスクリプトを書くときのポイントの1つはここにあります。つまり、ユーザの操作に反応したいセグメントを直接指定して、その操作が発生したときの動作を記述します。グラフィカルなユーザインタフェースを記述するときには、こういったイベイント駆動型のプログラミングが必要になります。
◇手続き「もう一度」(12~14行)
手続き「もう一度」は、手続き「オープニング」を実行します。つまり、図2から図7をもう一度繰り返すことになります。
◇手続き「社名を揺らす」(15~20行)
手続き「社名を揺らす」は、まず、セグメント「パーソナルメディア」を左に20ドット移動させます。そして、20ミリ秒間スクリプトの動作が止まります。次に、そこから右に40ドット移動させます。ふたたび、20ミリ秒間スクリプトの動作が止まります。最後にそこから左へ20ドット移動させ、元に位置に戻します。つまり、左右に1回揺れる動作をさせることになります。
MOVE文は、指定したセグメントを指定した量だけ移動するための命令です。「:20 30」と書けば、セグメントを右へ20ドット下へ30ドット移動した位置へ動かします(相対指定)。左、または上へ移動したいときは、負の値を使うことになります。
前のページへ舞台・役者を決める 次のページへマイクロスクリプトを実行する