
ティラノスクリプトのマクロとは
ティラノスクリプトには「マクロ」という機能があります。
マクロとは、複数のタグやJavaScriptを組み合わせて、オリジナルの機能を持ったタグのようなものを作る機能です。
なんだか難しそうですが、実はそうでもありません。
マクロは使いこなせば、より早く、より効率的にゲームを作ることができます。
マクロの使い方は簡単です。
- マクロを定義する
- シナリオ内でマクロを使う
マクロを定義する
定義する、というとなんだか難しく聞こえますが、「こういう名前のマクロをこれから使いますよ」とティラノスクリプト本体に設定することです。
マクロを定義するには、[macro]タグを使います。
[macro name="sample_macro"] [graph storage="heart.png"] [endmacro]
[macro]タグのnameパラメータで、「このマクロはこの名前」と設定します。
[endmacro]タグは、「このマクロはここでおしまい」という意味です。
[macro]と[endmacro]の間に、自分がそのマクロでやりたい処理を書いていきます。
上の例では、「sample_macro」という名前のマクロで、[graph]タグを使ってインライン画像を表示させています。
[endmacro]タグは、「このマクロはここでおしまい」という意味です。
[macro]と[endmacro]の間に、自分がそのマクロでやりたい処理を書いていきます。
上の例では、「sample_macro」という名前のマクロで、[graph]タグを使ってインライン画像を表示させています。
シナリオ内でマクロを使う
マクロを定義したら、実際にシナリオで使ってみましょう。
使い方は簡単で、他のタグを使うときと同じように「[マクロ名]」または「@マクロ名」と書くだけです。
使い方は簡単で、他のタグを使うときと同じように「[マクロ名]」または「@マクロ名」と書くだけです。
#akane 「語尾にハートがついちゃう[sample_macro]」
上の例では[sample_macro]と書いた位置に[sample_macro]マクロの処理([graph]タグの使用)が実行され、インライン画像が表示されます。
マクロ内で変数を使ってより使いやすくする
さて、マクロを定義していると、こういう事があると思います。
[macro name="akane_show"] [chara_show name="akane" x=200 y=100 layer=0] [endmacro] [macro name="yamato_show"] [chara_show name="yamato" x=200 y=100 layer=0] [endmacro] [macro name="hajime_show"] [chara_show name="hajime" x=200 y=100 layer=0] [endmacro]
3人のキャラクターをそれぞれ表示させるマクロを定義していますが、マクロの中身をよく見ると、nameパラメータの値が違うだけで、他はすべて同じことを書いていますよね。
このままでもいいといえばいいんですが、キャラクターが5人、10人と増えたときに、いちいちマクロを定義するのは面倒すぎます。
それにこのマクロだと、キャラクターの表示位置は常に同じ場所です。例えばあかねちゃんの登場位置を右端にしたいときなどは、また別のマクロを定義しないといけません。それは面倒すぎる!
このままでもいいといえばいいんですが、キャラクターが5人、10人と増えたときに、いちいちマクロを定義するのは面倒すぎます。
それにこのマクロだと、キャラクターの表示位置は常に同じ場所です。例えばあかねちゃんの登場位置を右端にしたいときなどは、また別のマクロを定義しないといけません。それは面倒すぎる!
普段タグを使うときと同じようにマクロにもパラメータを指定できたら、キャラクターの登場マクロはnameパラメータを書き換えるだけで済みますし、登場位置もx、yパラメータを指定するだけで、マクロを増やさなくても良さそうです。
マクロにパラメータを指定する方法は、簡単です。
[macro name="show"] [chara_show name="%name" x="%x" y="%y"] [endmacro]
それまで、キャラクター名を指定していたnameパラメータに「%name」と指定していますね。
これは、「マクロを使用するときに指定されたnameパラメータの値を指定する」という意味です。ややこしいな
これは、「マクロを使用するときに指定されたnameパラメータの値を指定する」という意味です。ややこしいな
つまり、マクロを使うときにこういう書き方ができるということです。
[show name=akane x=100 y=100] [show name=yamato x=400 y=100] [show name=hajime x=700 y=100]
マクロ使用時に、タグを使うときと同じようにパラメータを指定することで、[show]マクロ内では各パラメータの値を指定できるようになります。
これでキャラクターが増えるたびにマクロを定義しなくて済みますし、キャラクターの表示位置も自由に設定できます。
これでキャラクターが増えるたびにマクロを定義しなくて済みますし、キャラクターの表示位置も自由に設定できます。
マクロ内で使える、こんな書き方
マクロ内では「%パラメータ名」とすることで自由にパラメータを指定できます。
この他、マクロ内でだけ使える特別な書き方がいくつかあります。
この他、マクロ内でだけ使える特別な書き方がいくつかあります。
「|」(半角縦線)
[macro name=samplemacro] [image storage="%gazou|image.png" layer=0 x=100 y=100] [endmacro]
storageパラメータに指定された「%gazou|image.png」という書き方は、「gazouパラメータが指定されていればその値を、なければimage.pngを指定する」という意味です。
マクロで使うパラメータの名前は、自分で好きなものを指定できます。
また、「|」(半角縦線/shiftキーを押しながら\マークのキーを押す)のあとに値を指定することで、その値を「初期値」として設定することができます。
マクロで使うパラメータの名前は、自分で好きなものを指定できます。
また、「|」(半角縦線/shiftキーを押しながら\マークのキーを押す)のあとに値を指定することで、その値を「初期値」として設定することができます。
「*」(半角アスタリスク)
[macro name=samplemacro] [image *] [endmacro]
[image]タグに、パラメータが指定されず「*」(半角アスタリスク)だけが書かれています。
この書き方は、「マクロに指定されたパラメータをそのまま渡す」という意味です。
つまり、マクロを使うときに↓のように書くと、
この書き方は、「マクロに指定されたパラメータをそのまま渡す」という意味です。
つまり、マクロを使うときに↓のように書くと、
[samplemacro storage="iamge2.png" x=500 y=100 layer=0]
マクロに指定されたstorage、x、y、layerパラメータとその値がそのまますべてマクロ内に渡されます。
「*」を指定した[image]タグに「storage="iamge2.png" x=500 y=100 layer=0」と書かれたのと同じことになるのです。
この書き方をするときの注意は、「*」を使いたいタグのパラメータ名と、マクロを使うときのパラメータ名を同じにしなければならないことです。
オリジナルのパラメータを指定してもエラーにはなりませんが、「*」を使いたいタグで指定できないパラメータ名ではタグに値が渡されることはありません。
「*」を指定した[image]タグに「storage="iamge2.png" x=500 y=100 layer=0」と書かれたのと同じことになるのです。
この書き方をするときの注意は、「*」を使いたいタグのパラメータ名と、マクロを使うときのパラメータ名を同じにしなければならないことです。
オリジナルのパラメータを指定してもエラーにはなりませんが、「*」を使いたいタグで指定できないパラメータ名ではタグに値が渡されることはありません。
「mp」オブジェクト
[macro name=samplemacro] [image storage="&mp.gazou" layer=0 x=100 y=100] [endmacro]
storageパラメータに「&mp.gazou」という値が指定されています。
これは、「mp.gazou」という変数の値をパラメータに指定するという意味です。
「mp.gazou」とは何かと言うと、「gazou」というパラメータです。「%gazou」と同じ意味です。
これは、「mp.gazou」という変数の値をパラメータに指定するという意味です。
「mp.gazou」とは何かと言うと、「gazou」というパラメータです。「%gazou」と同じ意味です。
「mp」というのは、ティラノスクリプトで定義された変数の一つで、マクロ内でだけ使えるものです。
「%パラメータ名」という書き方だとタグの中でしか使えませんが、「mp.パラメータ名」という書き方では、マクロ内に記述されたJavaScriptの中でもパラメータの値が使えます。
「%パラメータ名」という書き方だとタグの中でしか使えませんが、「mp.パラメータ名」という書き方では、マクロ内に記述されたJavaScriptの中でもパラメータの値が使えます。
マクロを使う上で気をつけること
便利なマクロですが、ちょっと困ったことがあります。
それは、「マクロの中でさらに別のマクロを使う」ときに、パラメータの値があとから使った方のマクロの値で上書きされてしまうことです。
それは、「マクロの中でさらに別のマクロを使う」ときに、パラメータの値があとから使った方のマクロの値で上書きされてしまうことです。
[macro name=samplemacro] [show name=akane storage="image.png"] [image storage="%storage" layer=0 x=100 y=100] [endmacro]
上の例では、[samplemacro]内で[show]マクロをさらに呼び出しています。
このとき、storageパラメータを指定していますが、ここで指定したstorageの値で、[image]タグで指定しているstorageパラメータの値が上書きされてしまうのです。
このとき、storageパラメータを指定していますが、ここで指定したstorageの値で、[image]タグで指定しているstorageパラメータの値が上書きされてしまうのです。
対応策としては、一旦「mp」オブジェクトを適当な変数に退避しておいて、退避した方の変数をパラメータとして使う…とかになると思いますが、大抵の人はそこまで面倒なマクロは組まないと思います。