フワフワソが「ソラとピヨちゃん」や「宮本県」を作るブログ(フワフワソ・ラウンジnew!)

ラノベとテクノを愛するふわふわがノベルゲームを作っています。あと日常のことやイベントの告知なども。スクリプト関連の記事は自分用の備忘録です

(ティラノスクリプト)タグの要素でtimeとwait入れるときの注意と、時間制限付き選択肢の作り方、[glink]が不安定になるトラブル

timeとwait入れるときの注意

ティラノでは画像や文字表示関連のタグで、表示にかける時間が入れられるようになってます。time=500 とかにしておくと、画像がふんわり表示されていい感じです。

しかしここで、同時にwait=false にしておかないと、他の表示関連のwaitとぶつかったときにバグります。

たとえば常駐ボタンをおいて、その表示関連でwait=trueにしたままだと、

ボタンを連打したときなど、[time=500 wait=true]の処理が終わらないうちにまたあらたな[time=500 wait=true]が発生するのでおかしなことになります。

ボタン関連は必ずwait=false

連打に備えて、timeもなるべく0に近くしたほうがいいと感じました。

 
時間制限付き選択肢の作り方

wikiを拝見したところ、[glink]のあとに[s]の代わりに[wait=10000] などを入れればいいと分かりました。

そこで、カウントダウンの表示ができるように作ってみました。

[glink]のあとに、[jump target=*timer]を置きます。

メッセージレイヤ1で、"f.timer = 15"の秒数をカウントダウンします。

*timer
[eval exp="f.timer = 15"]

[position layer="message1" opacity=0]
[layopt layer=message1 visible="true"]
*timer2
[ptext layer=message1 text=&f.timer x=100 y=400 size=40 name="timer" time=0]
[anim name="timer" opacity=0 time=0]

[anim name="timer" opacity=255 top=400 time=1000]
[eval exp="f.timer = f.timer - 1"]
[wait time=1000]
[freeimage layer=message1]
[if eval exp="f.timer > 0"]
[jump target=*timer2]
[endif]
[jump target=*jikangire]

 

*jikangire

;タイマー消す
[freeimage layer=message1]

;タイマーのスタック消す

[wait_cancel]

時間切れ

[anim]タグはwaitを入れる必要がない(アニメの完了を待たない命令)ので、入っていません。

以下の部分は[glink]をクリックして飛んだ先でも必要です

;タイマー消す
[freeimage layer=message1]

;タイマーのスタック消す

[wait_cancel]

タイマーのスタック消す[wait_cancel]というタグがあったので、一応入れました。必要なのかどうかはよく分からないのですが。タグリファレンス読むとタイマーの途中でジャンプしたら入れた方がいいような気がしました

 

 この記事をなぜ書いたかというと、時間制限の表示を作っていたときに、waitのある常駐ボタン表示とぶつかってめちゃくちゃになったためです。

こうして原因が分かってしまえば簡単なのですが・・・><

ーーと、ここまで書いてから新たな問題が発生しました。[glink]が妙に不安定になってしまいました。

 

 [glink]が不安定になるトラブル

上記のスクリプトで、

1)[glink]で時間制限付き選択肢を表示させる

2)選択肢クリックでジャンプした先で、ちょっとしたメッセージを表示させて、1)のラベルに戻る

というテストをやっていました。

とろこが、[glink]の選択肢をクリックした後の動きが妙に不安定になりました。

[glink]を連打してると、2)のメッセージ表示の途中でフリーズしてしまう事態が発生。

毎回ではないのですが20回に1回くらい起きます。

発生条件を調べたのですが。選択肢外の場所を何回かクリックした後に、選択肢と選択肢外の境目の微妙なところをクリックするとフリーズするような感じがしました。

どうもはっきりとは分かりません。スクリプトの書き方が悪いのかもしれないですが、[glink]の代わりに[button]でやると問題なく動きます。

自分では解決できないので、[glink]を使うのはやめて[button]にすることにしました・・・。