Almightのタグでexp属性から他のタグを実行する方法

almightのbutton,link,choicesタグのexp属性で他のタグを実行する方法を紹介します。 exp属性にalmight.script.command();という形で、commandメソッドを使うことで他のタグを実行することができます。

commandメソッドとは

commandメソッドについての説明ですが、almight.jsに記載されていますので、まずそちらを引用します。

コマンドラインからタグを実行出来ます。


JS式でタグを実行したり、デバッグに利用出来ます。


複数のタグを指定しても、1つめのタグのみが実行されます。


@method command


@params {String} タグ


@params {Boolean} タグの結果に応じてシナリオを進行するかどうか


@return {Number} 0(停止) / 1(続行) / 2(非同期処理からの呼び出し) のステータス値を返します

引用元: almight.js

JavaScript式でタグを実行できる、というのが大事なポイントです。 exp属性にはJavaScript式を記述することで実行できるため、exp属性にcommandメソッドを使えば他のタグが使用できることが分かります。

補足となりますが、almightのタグについての説明箇所にもcommandメッソドのことが書かれているので、そちらも併せて引用します。

**Almightで使用出来るタグを管理します**


+ 0 : シナリオの処理を停止


+ 1 : シナリオの処理を続行


+ 2 : シナリオの処理を続行(非同期処理で処理が完了するとdequeueされる)


通常、直接呼び出すことはありません。


タグを実行する場合はScriptクラスのcommandメソッドを利用してください


@class Tag

引用元: almight.js

JavaScript式でalmight.script.tag.playbgm({storage: 'bgm.ogg'});という書き方をしてもタグを実行できるのですが、こういう書き方は推奨されていないようです。

exp属性から他のタグを使う

exp属性にjavaScript式でcommandメソッドを使えばよいことがわかったので、実際にどのような書き方になるかを紹介します。

// linkタグ BGM変更
[link exp="almight.script.command('[playbgm storage=bgm.ogg]')"]BGM[endlink]

// buttnタグ 背景画像を変更
[button graphic="crown.png" exp="almight.script.command('[image storage=bg.png layer=base]')"]

// choicesタグ 選択肢1でBGM再生 選択肢2で背景画像変更
[choices text1="bgm" exp1="almight.script.command('[playbgm storage=bgm.ogg]')" text2="背景変更" exp2="almight.script.command('[image storage=bg.png layer=base]')"]

exp="almight.script.command('[playse storage=se.ogg]')"という書き方をしていますが、シングルクォーテーション、ダブルクォーテーションの位置には注意してください。 exp="almight.script.command('[playse storage=se.ogg]')" 上記の赤文字の部分に注意するようにしてください。 exp属性と、commandメソッドには、文字列として値を渡してあげないといけないので、ダブルクォーテーションとシングルクォーテーションを併用する必要があります。 exp属性を""で囲ったJavaScript式を書いて、その中のcommand()の中も、''でタグの記述をまるっと囲みます。 [playse storage=bgm.ogg] 左記のように、storageの箇所をダブルクォーテーションで囲っていないのが気持ち悪いかもしれませんが、普通にタグを使うときも、実はタグの属性はダブルクォーテーションで囲う必要がないのです。 Almightは吉里吉里互換として作成されています。 吉里吉里は@playbgm storage=bgm loop=trueというように記述することができる仕様なので、Almightも同じように記述することができるようになっています。 そういうわけで[show_bg file=bg]という風に書いても動作するので、commandメッソドに指定する時にもstorageに対して""や''で囲ってあげなくても問題ありません。

動作しない例として、ダブルクォーテーションの中に + 演算子などで文字列の結合をせずに、そのままダブルクォーテーションを書くというものがあります。 exp="almight.script.command('[playbgm storage="bgm.ogg"]')" これは、どこからどこまでが文字列と解釈されるかというと、下記のように扱われます。 exp="almight.script.command('[playbgm storage="bgm.ogg"]')" このようにbgm.oggだけが文字列として扱われません。

ダブルクォーテーションの中にダブルクォーテーションをネストさせることはできませんし、シングルクォーテーションも同様です。 文字列を扱うときは、var str = "hogehoge" + "hugahuga";という風に+演算子で文字列を結合させたりします。 この結果、strに入るのはhogehogehugahugaという文字列になります。

どうしても、タグの中の属性はクォーテーションで囲いたいという場合は、以下のように記述してください。 [link exp="almight.script.command('[playbgm storage=' + 'bgm01.ogg'+ ']')"]BGM[endlink] このように記述すると正常に動作します。

「このような間違いをしがちかも?」という、正常に動作しない例を下記に書き出しておきます。

// exp属性へのcommandメソッドの指定が文字列として扱えていない
[link exp=almight.script.command('[playbgm storage="bgm.ogg"]')]BGM[endlink]

// commandメソッドへのタグの指定が文字列として扱えていない
[link exp="almight.script.command([playbgm storage=bgm.ogg])"]BGM[endlink]

// タグ全体ではなく、storageに対してのみ文字列の扱いをしている
[link exp="almight.script.command([playbgm storage='bgm.ogg'])"]BGM[endlink]

// ダブルクォーテーションの中にダブルクォーテーションを書いてしまっている
[link exp="almight.script.command('[playbgm storage="bgm.ogg"]')"]BGM[endlink]

人気記事すべて表示

AlmightJSすべて表示